PagePostgreSQL Database Backup & Restore
PostgreSQL Database Backup & Restore (api_dev → api_prod)
Dokumentasi ini menjelaskan cara melakukan backup database api_dev dan me-restore hasil backup tersebut ke api_prod menggunakan utility bawaan PostgreSQL: pg_dump dan psql.
Prasyarat
Pastikan tersedia informasi berikut:
| Parameter | Nilai |
|---|---|
| Database Source | api_dev |
| Database Target | api_prod |
| Database Host | 172.16.10.23 |
| User Source | api_dev |
| User Target | api_prod |
1. Melakukan Backup Database (Dump)
Jalankan perintah berikut dari terminal Linux (bukan dari prompt psql):
pg_dump -h 172.16.10.23 -U api_dev -d api_dev > backup_api_dev.sql
Penjelasan parameter:
| Parameter | Deskripsi |
|---|---|
-h |
Host/IP database PostgreSQL |
-U |
Username database |
-d |
Nama database yang akan dibackup |
> |
Redirect output ke file |
backup_api_dev.sql |
File hasil backup |
Contoh output:
backup_api_dev.sql
Catatan: Sistem akan meminta password untuk user
api_dev.
2. Restore Database ke api_prod
Setelah file backup berhasil dibuat, restore data ke database tujuan menggunakan perintah berikut:
psql -h 172.16.10.23 -U api_prod -d api_prod < backup_api_dev.sql
Penjelasan:
| Parameter | Deskripsi |
|---|---|
-h |
Host/IP database PostgreSQL |
-U |
User database tujuan |
-d |
Database tujuan |
< |
Membaca input dari file SQL |
Perintah tersebut akan menjalankan seluruh isi backup_api_dev.sql ke dalam database api_prod.
3. Backup dan Restore Langsung (Tanpa File Sementara)
Jika tidak perlu menyimpan file backup dan source serta target berada pada host yang dapat saling diakses, proses dapat dilakukan langsung menggunakan pipe:
pg_dump -h 172.16.10.23 -U api_dev api_dev | psql -h 172.16.10.23 -U api_prod api_prod
Dengan metode ini:
-
Data langsung dikirim dari
api_dev -
Tidak ada file
.sqlyang dibuat -
Cocok untuk migrasi cepat
Hal yang Perlu Diperhatikan
A. Menghindari Error Ownership
Ketika file dump direstore, terkadang terdapat statement seperti:
ALTER TABLE xxx OWNER TO api_dev;
Hal ini dapat menyebabkan error apabila user api_prod tidak memiliki hak untuk mengubah owner object tersebut.
Untuk menghindari masalah ini, gunakan parameter --no-owner saat proses backup:
pg_dump -h 172.16.10.23 -U api_dev --no-owner -d api_dev > backup_api_dev.sql
Dengan opsi tersebut:
-
Informasi owner tidak ikut diekspor
-
Object otomatis dimiliki oleh user yang melakukan restore
B. Pastikan Database Tujuan Bersih
Sebaiknya database api_prod dalam kondisi kosong atau baru dibuat untuk menghindari:
-
Duplicate data
-
Primary key conflict
-
Error object sudah ada
Jika ingin menimpa database yang sudah berisi data, tambahkan parameter -c (clean) saat dump:
pg_dump -h 172.16.10.23 -U api_dev --no-owner -c -d api_dev > backup_api_dev.sql
Parameter -c akan menyertakan perintah:
DROP TABLE ...
DROP SEQUENCE ...
DROP VIEW ...
sebelum membuat object baru.
Rekomendasi
Untuk proses migrasi database antar environment (dev → prod), metode yang lebih aman biasanya:
pg_dump -h 172.16.10.23 -U api_dev --no-owner -c -d api_dev > backup_api_dev.sql
psql -h 172.16.10.23 -U api_prod -d api_prod < backup_api_dev.sql
Karena:
-
Tidak membawa ownership lama
-
Menghapus object lama sebelum restore
-
Mengurangi potensi konflik data
No Comments