PostgreSQL: instalasi dan database pertama Anda
Instalasi PostgreSQL di VDS, role dan database pertama, cara autentikasi bekerja di pg_hba.conf, dan troubleshooting error koneksi.
Diperbarui 23 Agustus 2026
PostgreSQL adalah pilihan default untuk aplikasi di Python, Node.js, dan Go. PostgreSQL memperlakukan data lebih ketat daripada MySQL dan menangani kueri kompleks dengan lebih baik.
Instalasi
apt update && apt install -y postgresql postgresql-contrib # Debian, Ubuntu
systemctl enable --now postgresql
Di AlmaLinux dan CentOS Stream Anda perlu membuat cluster secara manual:
dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql
Periksa versi dan status:
sudo -u postgres psql -c "SELECT version();"
Role dan database
Di PostgreSQL, pengguna disebut role. Buat role terpisah untuk setiap proyek:
sudo -u postgres psql
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop ENCODING 'UTF8';
REVOKE ALL ON DATABASE shop FROM PUBLIC;
String koneksi untuk aplikasi:
postgresql://shop:password@127.0.0.1:5432/shop
Periksa dari pengguna sistem:
psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"
Autentikasi
Dua file menentukan siapa yang dapat masuk dan dari mana.
/etc/postgresql/17/main/postgresql.conf:
listen_addresses = 'localhost'
port = 5432
/etc/postgresql/17/main/pg_hba.conf — aturan dibaca dari atas ke bawah, dan aturan pertama yang cocok yang menang:
local all postgres peer
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
Metode peer berarti "pengguna sistem cocok dengan role" — itulah sebabnya sudo -u postgres psql berfungsi tanpa kata sandi, sedangkan perintah yang sama dari pengguna lain tidak.
Setelah mengedit: systemctl reload postgresql. Jangan pernah menggunakan metode trust — metode ini membiarkan siapa saja masuk tanpa kata sandi sama sekali.
Untuk akses dari luar, baca akses jarak jauh: Anda tidak boleh membuka port ke luar tanpa membatasinya berdasarkan alamat.
Kesalahan umum
| Gejala | Penyebab |
|---|---|
role "..." does not exist | Anda terhubung sebagai pengguna sistem yang tidak memiliki role |
password authentication failed | Aturan di pg_hba.conf memerlukan metode berbeda, atau kata sandi belum diatur |
could not connect to server: No such file or directory | Layanan tidak berjalan, atau menggunakan port berbeda |
permission denied for schema public | Di versi 15+ Anda harus memberikan hak pada public secara eksplisit: GRANT ALL ON SCHEMA public TO shop; |
FATAL: sorry, too many clients | max_connections sudah habis — siapkan pool di sisi aplikasi |
Log: /var/log/postgresql/ atau journalctl -u postgresql.
Langkah selanjutnya
- Penyesuaian memori per tier — pada VDS-1 nilai default terasa terlalu rendah.
- Backup —
pg_dumpdan pemulihan. - Migrasi database dari server lain.
Jangan berikan role superuser kepada aplikasi. Role pemilik database biasa dapat melakukan semua yang dibutuhkannya, tetapi tidak dapat menghapus database tetangga jika migrasi gagal.