Kehilangan data bisa mengakhiri karier. Database PostgreSQL tanpa strategi backup yang teruji dan otomatis adalah kewajiban yang menunggu untuk terwujud. Di Commsult Indonesia, kami mengelola data ERP untuk klien di mana satu hari transaksi yang hilang dapat berarti konsekuensi finansial dan hukum yang serius.
PostgreSQL memiliki dua pendekatan backup fundamental: backup logis (pg_dump) dan backup fisik (pg_basebackup, pgBackRest). Backup logis mengekspor pernyataan SQL yang membuat ulang skema dan data Anda — portabel, dapat dibaca manusia, dan bekerja di seluruh versi PostgreSQL. Backup fisik menyalin file data mentah — lebih cepat untuk database besar, diperlukan untuk point-in-time recovery (PITR), namun spesifik versi.
pg_dump adalah alat backup paling sederhana dan cukup untuk database di bawah 10GB dengan RPO (recovery point objective) beberapa jam. Perintah pg_dump -Fc -f backup.dump dbname membuat dump format custom terkompresi yang dipulihkan dengan pg_restore. Jadwalkan pg_dump melalui cron pada frekuensi yang diinginkan, dan segera kirim dump ke penyimpanan offsite.
pg_basebackup membuat salinan biner direktori data PostgreSQL saat server sedang berjalan. Ini adalah dasar untuk replikasi streaming dan PITR. Gunakan pg_basebackup -D /path/to/backup -Ft -z -P untuk backup tarball dengan output progres. Backup fisik lebih cepat untuk dipulihkan untuk database besar.
┌─────────────────────────────────────────────────────┐
│ POSTGRESQL BACKUP STRATEGY LAYERS │
└─────────────────────────────────────────────────────┘
PostgreSQL DB
│
├── [1] pg_dump (daily) ──────► Offsite Object Storage
│ (logical backup) (Spaces / GCS / B2)
│
├── [2] pg_basebackup (weekly) ► Backup VPS
│ (physical backup) (same region)
│
├── [3] WAL Archiving ──────────► Object Storage
│ (continuous) (PITR to any timestamp)
│
└── [4] pgBackRest (full+incr) ► Encrypted S3-compat
(production-grade)
3-2-1 Rule: 3 copies | 2 media types | 1 offsiteDari pengalaman saya mengelola backup PostgreSQL di Commsult Indonesia, selalu uji proses pemulihan Anda setiap bulan. Atur pengingat kalender, sediakan VPS sementara, pulihkan backup terbaru Anda, dan jalankan query sanity check terhadap data yang dipulihkan. Saya menemukan pg_dump kami gagal secara diam-diam karena masalah ruang disk di VPS backup — kami memiliki 3 minggu file backup kosong.
WAL (Write-Ahead Log) adalah log transaksi yang ditulis PostgreSQL sebelum menerapkan perubahan ke file data. Dengan mengarsipkan segmen WAL secara terus-menerus, Anda dapat memulihkan ke titik waktu mana pun antara backup dasar — bukan hanya cap waktu backup. Untuk database di mana data sering berubah (ERP, sistem keuangan), PITR memungkinkan Anda berkata: pulihkan ke 10:47:23 kemarin, sebelum DELETE yang tidak sengaja dijalankan.
pgBackRest adalah alat backup yang direkomendasikan untuk PostgreSQL produksi. Ia mendukung backup penuh, inkremental, dan diferensial; backup dan pemulihan paralel; kompresi dan enkripsi; beberapa backend penyimpanan (lokal, S3, Azure, GCS); dan PITR yang disederhanakan.
# Daily pg_dump backup script
#!/bin/bash
DB_NAME="production_db"
BACKUP_DIR="/backups/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
DUMP_FILE="$BACKUP_DIR/${DB_NAME}_$DATE.dump"
pg_dump -Fc -f "$DUMP_FILE" "$DB_NAME"
# Upload to DigitalOcean Spaces
s3cmd put "$DUMP_FILE" s3://my-backups/postgres/
# Delete local files older than 3 days
find "$BACKUP_DIR" -name "*.dump" -mtime +3 -delete
# Send success signal (dead man's switch)
curl -s "https://hc-ping.com/YOUR-UUID"
# WAL archiving in postgresql.conf
# archive_mode = on
# archive_command = 'aws s3 cp %p s3://my-backups/wal/%f'
# wal_level = replicaPipeline backup produksi untuk instance DigitalOcean Managed PostgreSQL: gunakan backup otomatis bawaan (disertakan dengan layanan terkelola, retensi 7 hari), tambahkan backup pg_dump harian Anda sendiri ke DigitalOcean Spaces untuk retensi 30 hari dan perlindungan lintas region, dan uji pemulihan bulanan.
Saya pernah memiliki DigitalOcean Droplet gagal dengan filesystem yang rusak yang juga merusak volume backup yang dipasang di server yang sama. Backup lokal di server yang sama atau bahkan datacenter yang sama bukan backup nyata — itu adalah salinan kenyamanan. Ikuti aturan 3-2-1: 3 salinan data, 2 jenis media berbeda, 1 offsite.
Kebijakan retensi menyeimbangkan RPO, biaya penyimpanan, dan persyaratan kepatuhan. Untuk sebagian besar data ERP bisnis kecil di Commsult Indonesia: backup harian 7 hari (mencakup penghapusan yang tidak disengaja), backup mingguan 4 minggu (mencakup penemuan korupsi yang tertunda), backup bulanan 12 bulan (mencakup persyaratan kepatuhan dan audit).
Backup yang berjalan diam-diam dan gagal diam-diam lebih buruk daripada tidak ada backup, karena menciptakan kepercayaan diri yang palsu. Pantau kesehatan backup: kirim alert Telegram saat pekerjaan backup berhasil (sehingga Anda menyadari ketika notifikasi berhenti), kirim alert segera saat kegagalan backup, lacak ukuran file backup dan alert jika turun secara signifikan.