PostgreSQL 3 minute read

Hai semuannya, di materi kali ini kita membahas Install PostgreSQL menggunakan Docker, Pembahasannya diantaranya:

  1. Install docker
  2. Running PostgreSQL in Docker
  3. Using pgAdmin4 web based
  4. Migrate schema using flyway

Ok langsung saja kita bahas ke materi yang pertama yaitu

Install docker

Buat temen-temen yang belum kenal dengan Docker, Docker adalah salah satu teknologi virtualization yang sedang naik daun 3 tahun terakhir karena memudahkan kita untuk melakukan install suatu software/service. Kita juga bisa memanfaatkan docker ini untuk belajar PostgreSQL sebagai Learning environment.

Tahap pertama, yang harus temen-temen lakukan adalah install adalah

  1. Install Docker untuk Windows
  2. Install Docker untuk linux
  3. Install Docker untuk mac

Running PostgreSQL in Docker

Untuk menjalakan PostgreSQL di Docker ini sebetulnya sangatlah mudah, kita cukup jalankan perintah:

docker run -p 5432:5423 \
  -e POSTGRES_PASSWORD=password \
  -d postgres:14.1

Tetapi kita akan menggunakan docker-compose ya supaya scriptnya tersimpan dengan baik. seperti berikut:

Kemudian kita buat file .env seperti berikut:

PRIVATE_REPOSITORY=docker.io/
POSTGRES_VERSION=14.1-alpine
POSTGRES_PORT=5432
POSTGRES_PASSWORD=password
POSTGRES_USER=postgres
POSTGRES_DB=postgres

Kemudian kita jalankan dengan perintah

docker-compose -f docker-compose.yaml --env-file .env up -d

Using pgAdmin4 web based

Untuk text editor seperti pgadmin4 kita bisa menggunakan versi Desktop atau juga kita bisa menggunakan version web yang kita pasang dalam docker, sepertinya temen-temen liat pada script docker-compose.yaml sebelumnya seperti berikut:

pgadmin4:
  image: ${PRIVATE_REPOSITORY}dpage/pgadmin4
  profiles:
    - debug
  environment:
    - PGADMIN_DEFAULT_PASSWORD=${POSTGRES_PASSWORD}
    - PGADMIN_DEFAULT_EMAIL=${POSTGRES_USER}@example.com
  ports:
    - 55432:80
  volumes:
    - pg_admin_data:/var/lib/pgadmin
  depends_on:
    - postgres

Untuk meng-aktifikan container pgadmin4 tersebut, kita perlu menggunakan profile debug dengan perintah seperti berikut:

docker-compose -f docker-compose.yaml --env-file .env --profile debug up -d

Jika sudah, kita bisa akses dengan alamat localhost:55432 seperti berikut:

pgadmin4

Sekarang kita akan buat connection ke PostgreSQL server di Docker, Kita klik kanan di Menu Servers -> Create -> Server kemudian kita input connection name contohnya: postgresql dan kemudian kita ke tab Connection seperti berikut:

new connection

Berikut properties:

Property Value Description
Host postgres Karena kita menggunakan container, kita tidak bisa menggunakan localhost karena docker memiliki ip yang berbeda setiap container
Database postgres Sesuaikan dengan .env yang telah kita buat
Username postgres Sesuaikan dengan .env yang telah kita buat
Password password Sesuaikan dengan .env yang telah kita buat

Jika sudah, kita klik Save, maka jika success hasilnya seperti berikut:

admin4 connected

Migrate schema using flyway

Untuk belajar, kita membutuhkan user & database/schema untuk mencoba feature dari PostgreSQL. Sekarang kita akan buat user & database di Docker melalui psql

docker-compose \
  -f docker-compose.yaml \
  --env-file .env \
  exec postgres \
  psql -U postgres -W 

Kemudian kita buat schema dengan perintah seperti berikut:

Setelah kita buat schema, user dan database, kita download file ini simpan dalam folder db/migration dan jalankan migrationnya dengan perintah

docker-compose \
-f docker-compose.yaml \
--env-file .env \
--profile migrate up -d

Jika sudah sekarang kita bisa check dengan perintah berikut:

docker-compose \
-f docker-compose.yaml \
--env-file .env \
exec postgres psql -U hr -W -c "\dt"

Jika dijalankan hasilnya seperti berikut:

 postgresql git:(master) docker-compose -f docker-compose.yml --env-file .env exec postgres psql -U hr -W -c "\dt"
Password:
                  List of relations
  Schema  |         Name          | Type  |  Owner
----------+-----------------------+-------+----------
 hr       | countries             | table | hr
 hr       | departments           | table | hr
 hr       | employees             | table | hr
 hr       | flyway_schema_history | table | hr
 hr       | job_history           | table | hr
 hr       | jobs                  | table | hr
 hr       | locations             | table | hr
 hr       | regions               | table | hr
(8 rows)