A personal journal.

Export Import postgres dengan pg_dump dan pg_restore

Published on: 07/08/2024 • Updated on: 14/05/2025 • 1 min read

Preambule

Mari kita mulai dengan hal yang membosankan.

pg_dump : is a utility for backing up a PostgreSQL database. It makes consistent backups even if the database is being used concurrently. pg_dump does not block other users accessing the database (readers or writers).

Kenapa saya tidak tahu ada tools ini? Karena biasanya database lokal yang dibuat mainan adalah MySQL. Benar saja, tools ini dapat kita gunakan tanpa harus menunggu database yang digunakan untuk idle. Intinya, kita bisa langsung menggunakan tools ini, meskipun jika ada data baru kemungkinan akan terlewat. GAS!

pg_restore : is a utility for restoring a PostgreSQL database from an archive created by pg_dump in one of the non-plain-text formats. It will issue the commands necessary to reconstruct the database to the state it was in at the time it was saved. The archive files also allow pg_restore to be selective about what is restored, or even to reorder the items prior to being restored. The archive files are designed to be portable across architectures.

Setelah berhasil backup, tentu harus di-restore. Tapi kenapa saya harus menggunakan tool ini? Sebagai pengguna biasa, saya belum pernah menemui database yang rumit, maksudnya memiliki constraint yang aneh, dan ketika database yang saya backup dengan SQL tidak bisa di-restore dengan mudah, ini adalah satu-satunya cara.

Menggunakan pg_dump

Ada banyak cara, tapi saya suka dengan perintah ini:

pg_dump -v -Fc --no-acl --no-owner --no-table-access-method --disable-triggers --host=[host] --username=[username] --dbname=[database] --password -f [namafile]

pg_dump

Penjelasan:

  • -v : verbose
  • -Fc : menggunakan custom format yang cocok untuk digunakan di pg_restore, sudah di kompres secara default.
  • --no-acl : dump tanpa access privilage, karena asumsinya kita berpindah server, dan tentu pemiliknya berbeda.
  • --no-owner : sama seperti diatas, supaya authorship tidak ikut di dump.
  • --no-table-access-method : sama juga seperti diatas.
  • --disable-triggers : untuk menunda sementara pembuatan constraint.

Menggunakan pg_restore

Perintah pg_restore sebenarnya sama seperti pg_dump di atas, namun terkadang kita tidak perlu menambahkan argumen lain karena kita sudah menggunakan custom format saat melakukan dump. Namun untuk lebih amannya, akan saya tulis ulang:

pg_restore -v -Fc --no-acl --no-owner --no-table-access-method --disable-triggers --host=[host] --username=[username] --dbname=[database] --password [namafile]

pg_restore

Selesai!

Ya, memang cuma itu. Saran saya selanjutnya, karena sudah bersusah payah dump dan restore, kamu bisa menjalankan VACUUM atau VACUUM ANALYZE.