Dokumen ini merangkum cara install PostgreSQL di Linux (Debian/Ubuntu & RHEL/Rocky/Alma), daftar versi dan lifecycle/EOL, arsitektur HA (high availability) dari level production hingga enterprise, serta security best practices. Fokus pada operational playbook agar bisa langsung dipakai.
Audience: Sysadmin/DevOps/DBA • OS: Debian/Ubuntu, RHEL/Rocky/AlmaLinux • PostgreSQL: 13–17 (dan 18 saat rilis GA)
PostgreSQL rilis mayor setahun sekali (sekitar September) dan disupport 5 tahun sejak rilis awal. Artinya, tiap versi punya tanggal End of Life (EOL). Rekomendasi umum: gunakan minor terbaru pada major yang masih didukung.
Major | Rilis | Perkiraan EOL | Catatan |
---|---|---|---|
17 | 2024-09 | 2029-11 | Stable saat ini, fitur logical repl. & kinerja makin matang |
16 | 2023-09 | 2028-11 | Umum dipakai di LTS distro/cloud |
15 | 2022-11 | 2027-11 | Stabil luas |
14 | 2021-09 | 2026-11 | Stabil, mendekati EOL |
13 | 2020-09 | 2025-11-13 | Segera rencana upgrade |
12 | 2019-10 | 2024-11-14 | EOL (hindari di production) |
sudo apt update
sudo apt install -y curl ca-certificates lsb-release
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt install -y postgresql-17 postgresql-client-17 postgresql-contrib-17
psql --version
sudo systemctl status postgresql
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql17-server postgresql17-contrib
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
sudo systemctl enable --now postgresql-17
/usr/pgsql-17/bin/psql --version
sudo systemctl status postgresql-17
/etc/postgresql/<major>/main/
, /var/lib/postgresql/<major>/main
/var/lib/pgsql/<major>/data
listen_addresses = '0.0.0.0'
port = 5432
wal_level = replica
max_wal_size = 4GB
min_wal_size = 1GB
max_wal_senders = 10
max_replication_slots = 10
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%a.log'
log_min_duration_statement = 1000
password_encryption = 'scram-sha-256'
ssl = on
hostssl all all 10.10.0.0/16 scram-sha-256
hostnossl all all 0.0.0.0/0 reject
\password postgres
CREATE ROLE app_user LOGIN PASSWORD 'kuat';
CREATE DATABASE appdb OWNER app_user;
GRANT CONNECT ON DATABASE appdb TO app_user;
Primary postgresql.conf:
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
synchronous_standby_names = 'ANY 1 (standby1, standby2)'
User repl:
CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD 'superkuat';
Standby bootstrap:
pg_basebackup -h <PRIMARY_IP> -D <DATA_DIR> -U repl -X stream -C -S slot_standby1 --progress
scope: pg-ha
namespace: /service/
name: node1
restapi:
listen: 0.0.0.0:8008
connect_address: node1:8008
etcd:
host: etcd1:2379,etcd2:2379,etcd3:2379
bootstrap:
dcs:
synchronous_mode: true
postgresql:
parameters:
wal_level: replica
postgresql:
listen: 0.0.0.0:5432
connect_address: node1:5432
data_dir: /var/lib/postgresql/17/main
sudo -u postgres pgbackrest --stanza=demo stanza-create
sudo -u postgres pgbackrest --stanza=demo backup
sudo -u postgres pgbackrest --stanza=demo restore --delta --type=time "--target=2025-09-01 10:00:00"
ssl=on
)scram-sha-256
untuk passwordpgaudit
trust
di pg_hba.confhostnossl all all 0.0.0.0/0 reject
hostssl all app_user 10.50.0.0/16 scram-sha-256
frontend psql
bind *:6432
mode tcp
default_backend pg_rw
backend pg_rw
mode tcp
option tcp-check
server pg1 10.10.1.11:5432 check
server pg2 10.10.1.12:5432 check backup
[databases]
appdb = host=127.0.0.1 port=6432 dbname=appdb auth_user=pgbouncer
[pgbouncer]
listen_port = 6433
pool_mode = transaction
max_client_conn = 2000
default_pool_size = 100
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt