Cara Mudah Setup PostgreSQL di Podman

6 Agustus 2026

Menjalankan PostgreSQL lewat container itu jauh lebih praktis dibanding install langsung di sistem: tidak ada konflik versi, gampang dihapus kalau sudah tidak dipakai, dan datanya tetap aman selama disimpan di volume. Artikel ini membahas cara menjalankan PostgreSQL pakai Podman, termasuk cara konek ke database-nya dan isu izin volume yang sering muncul di rootless Podman.

Prasyarat

Langkah 1: Pull dan Jalankan Container

podman run -d \
  --name postgres16 \
  -e POSTGRES_PASSWORD=yourpassword \
  -e POSTGRES_DB=mydb \
  -e POSTGRES_USER=myuser \
  -p 127.0.0.1:5432:5432 \
  -v postgres16_data:/var/lib/postgresql/data \
  docker.io/library/postgres:16

Penjelasan tiap opsinya:

💡 Ganti yourpassword dengan password yang kuat, terutama kalau container ini akan diakses lebih dari sekadar localhost.

Langkah 2: Pastikan Container Sudah Jalan

podman ps
podman logs -f postgres16

Tunggu sampai muncul baris seperti database system is ready to accept connections di log sebelum mencoba konek — ini tandanya PostgreSQL sudah selesai inisialisasi dan siap menerima koneksi.

💡 Khusus di run pertama (saat volume masih kosong dan database baru diinisialisasi), baris ini biasanya muncul dua kali: sekali untuk server sementara yang dipakai menjalankan skrip inisialisasi, lalu sekali lagi setelah PostgreSQL restart otomatis dan jalan permanen. Kalau kamu konek persis di antara dua baris itu, biasanya akan kena connection refused sesaat — tunggu baris kedua supaya aman.

Langkah 3: Konek ke Database

Dari dalam container:

podman exec -it postgres16 psql -U myuser -d mydb

Dari host (kalau sudah punya client psql terinstall):

psql -h 127.0.0.1 -p 5432 -U myuser -d mydb

Langkah 4: Catatan untuk Rootless Podman

Kalau kamu menjalankan Podman dalam mode rootless dan container gagal start atau muncul error izin (permission denied) saat menulis ke volume, biasanya penyebabnya adalah SELinux. Tambahkan suffix :Z di mount volume-nya supaya Podman melakukan relabeling otomatis:

-v postgres16_data:/var/lib/postgresql/data:Z

💡 Flag :Z memberi tahu Podman bahwa volume ini hanya dipakai oleh satu container, jadi konteks SELinux-nya di-set khusus untuk itu. Kalau volume yang sama dipakai bareng oleh beberapa container, pakai :z (huruf kecil) sebagai gantinya.

Langkah 5: Mengelola Container

Beberapa perintah dasar untuk sehari-hari:

podman stop postgres16        # hentikan container
podman start postgres16       # jalankan lagi (data tetap ada)
podman rm postgres16          # hapus container (volume tetap ada)
podman volume rm postgres16_data   # hapus volume juga, kalau memang mau reset data

Langkah 6: Import Dump SQL ke Database

Kalau kamu migrasi dari server lama atau restore backup, ini cara import dump ke PostgreSQL yang jalan di container. Ada dua format dump yang umum: plain SQL (.sql) dan format custom pg_dump (.dump) — cara import-nya beda, jadi disesuaikan dulu formatnya.

Opsi 1: Pipe Langsung dari Host (Dump Plain SQL)

podman exec -i postgres16 psql -U myuser -d mydb < /path/to/dump.sql

Opsi 2: Copy File ke Container Dulu, Baru Import di Dalam

Lebih cocok untuk file .sql yang besar:

podman cp /path/to/dump.sql postgres16:/tmp/dump.sql
podman exec -it postgres16 psql -U myuser -d mydb -f /tmp/dump.sql

Kalau Dumpnya Format Custom pg_dump (.dump)

Dump format custom (hasil pg_dump -Fc) tidak bisa di-pipe ke psql, harus pakai pg_restore:

podman cp /path/to/dump.dump postgres16:/tmp/dump.dump
podman exec -it postgres16 pg_restore -U myuser -d mydb --no-owner /tmp/dump.dump

Beberapa Tips Praktis

Langkah Selanjutnya

Setup manual seperti di atas sudah cukup untuk development sehari-hari. Kalau kamu butuh PostgreSQL yang otomatis jalan setiap kali sistem boot — misalnya untuk kebutuhan server — pertimbangkan untuk memindahkan konfigurasi ini ke podman-compose atau Quadlet file, supaya lifecycle container-nya dikelola oleh systemd.