Bagaimana cara menggunakan PostgreSQL tanpa melakukan instalasi?
Tags: postgres, docker, sql, node
Published: 2024-03-07 14:56:50

Salah satu _database_ **SQL** yang cukup populer saat ini adalah `PostgreSQL`. Didukung perkembangan bahasa pemrograman yang cukup tinggi, baik ragam dan jenisnya, penggunaan berbagai macam _database_ mendapatkan pengaruh juga. Hal ini menuntut para _software developer_ untuk dapat menggunakannya. Bersamaan dengan itu, tuntutan untuk melakukan instalasi juga harus dikerjakan.

Keberadaan `docker` menjadi opsi anti ribet untuk melakukan instalasi serta menggunakannya. Sehingga bekal yang harus dimiliki oleh para _developer_ cukup `docker` saja di lokal komputer masing-masing. Spesifik akan dibahas seputar cara menjalankan `PostgreSQL` pada `docker`, berikut _tools_ yang mendukung untuk menggunakannya sebagai _software developer_.

## Persiapan awal

Pada tahap ini perlu dipastikan untuk memiliki pengetahuan terkait `docker`, khususnya **docker compose**, dikarenakan akan terdapat `code`/`script` yang membutuhkan pengalaman di dalamnya. Termasuk _tools_ yang akan direkomendasikan akan berupa aplikasi yang dijalankan menggunakan `docker` dan yang ada di luar dan memerlukan instalasi tersendiri tanpa `docker`. Berikut tahapan-tahapannya:

- Membuat direktori aplikasi untuk mengelola `code` yang selanjutnya akan memudahkan proses menjalankan `PostgreSQL`.
```
mkdir <direktori-projek> && cd <direktori-projek>
```

- Membuat _file_ **docker compose** dengan nama `docker-compose.yaml` seperti berikut:
```
version: '3.8'

services:
  pgsql:
    container_name: pgsql-app
    image: 'postgres:latest'
    ports:
      - '${DB_PORT:-5432}:5432'
    environment:
      POSTGRES_DB: '${DB_NAME}'
      POSTGRES_USER: '${DB_USER}'
      POSTGRES_PASSWORD: '${DB_PASSWORD}'
    volumes:
      - './data:/var/lib/postgresql/data'
    restart: always

```
Susunan `code` tersebut memiliki acuan pada situs [docker hub](https://hub.docker.com/) berdasarkan _image_ ([postgres](https://hub.docker.com/_/postgres)) yang akan digunakan. Penggunaan _options_ dijelaskan detail pada halaman masing-masing _image_.

- Menambahkan _file_ `env` untuk mengisikan **value** yang akan digunakan pada saat menjalankan **docker compose**. Lalu menyesuaikan isi berupa _value-value_ berdasarkan kebutuhan yang diperlukan.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9hnrsoxz4swgil3l3on.png)

- (Opsional) Menggunakan `adminer` sebagai _database tools_ untuk melakukn **query** dan transaksi lainnya terkait `PostgreSQL`. Pada _file_ **docker compose** perlu ditambahkan _service_ tambahan untuk `adminer` di bawah `postgres` seperti berikut:
```
  adminer:
    container_name: adminer-app
    image: adminer
    ports:
      - '${ADMINER_PORT:-8000}:8080'
    restart: always
    depends_on:
      - pgsql
```

- Menjalankan perintah `docker` untuk menjalankan `PostgreSQL` dan `adminer` yang telah diatur sebelumnya dengan perintah:
```
docker-compose up -d
```

- Memastikan _service-service_ telah berjalan sesuai dengan pengaturan di dalam _file_ **docker compose** dengan perintah:
```
docker ps
```

![List of container](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6pxc0d2ps7nird6yxzvl.png)

- Untuk memberhentikan _service_ yang telah dijalankan menggunakan perintah berikut:
```
docker-compose down
```

## Uji lapangan

Setelah menjalankan perintah `docker`, dapat dipastikan bahwa `PostgreSQL` dan `adminer` dapat digunakan di lokal komputer. `adminer` dapat diakses melalui browser [di sini](http://localhost:8000/) dengan **port** menyesuaikan pada _file_ `.env`. Menyesuaikan juga _value-value_ yang diisikan ke dalam _form_ berdasarkan pada _file_ `.env`. Berikut hasil _capture_ dari penggunaannya di _browser_:

![Halaman Awal](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7iwelw504emho2eifgw6.png)

Lalu `query` dan transaksi _database_ lainnya dapat dilakukan melalui halaman `adminer` tersebut. Termasuk membuat **table**, menambahkan `record` ke dalam **table**, menghapus `record` dari dalam **table**, dan lainnya. Berikut tampilan beberapa proses transaksi _database_ yang dapat dilakukan:

![Halaman Database](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tn7i7x1xb1s9bzi9iah.png)

Membuat sebuah **table** dengan nama _user_ beserta kolom-kolomnya.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kjc1udmeemvrpaywqyfo.png)

Hasil **table**-nya akan menjadi seperti berikut:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55ngyt6ofzgbt8b4tmfc.png)

Terdapat _tools_ lain yang dapat digunakan untuk melakukan manajemen _database_ yaitu **Dbeaver**. Diperlukan untuk melakukan instalasi di lokal komputer sebelumnya. **Dbeaver** lebih nyaman digunakan dan _user friendly_ karena lebih lengkap fiturnya. Selebihnya masih terdapat banyak _tools_ lain untuk dapat melakukan manajemen _database_. Yang disebutkan pada tulisan ini adalah yang pernah digunakan.
Berikut penampakan konfigurasi pada **Dbeaver** yang selanjutnya transaksi _database_ dapat dilakukan. Jangan lupa untuk menyesuaikan _value-value_ berdasarkan _file_ `.env`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibhg89lien7kkie7u0i2.png)

## Penutup

Selain dikenal lebih stabil dikalangan _database_ **SQL**, tidak sulit juga dalam penggunaannya untuk `PostgreSQL`. Jika sebelumnya pernah menggunakan `MySQL`, `Oracle`, seharusnya tidak akan kesulitan dalam penggunaan `PostgreSQL`. _Source code_ terkait artikel kali ini dapat dicek [di sini](https://gitlab.com/devto182/postgredc). Selanjutnya dapat diteruskan pada saat kebutuhan sebuah aplikasi untuk keperluan _database_ **SQL**. Sekian.

---

> Credits:
> Image cover by <a href="https://unsplash.com/@frostroomhead?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Rodion Kutsaiev</a> on <a href="https://unsplash.com/photos/white-paper-roll-on-white-table-6W8H4puOJB0?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Unsplash</a>.
  

> Support me on:
> [saweria](https://saweria.co/angm182)

---

[![my-site](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://anangm182.com/)