Skip to main content

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:

ParameterNilai
Database Sourceapi_dev
Database Targetapi_prod
Database Host172.16.10.23
User Sourceapi_dev
User Targetapi_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:

ParameterDeskripsi
-hHost/IP database PostgreSQL
-UUsername database
-dNama database yang akan dibackup
>Redirect output ke file
backup_api_dev.sqlFile 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:

ParameterDeskripsi
-hHost/IP database PostgreSQL
-UUser database tujuan
-dDatabase 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 .sql yang 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