Mengekspor dan mengimpor menggunakan pg_dump, pg_dumpall, dan pg_restore

Halaman ini menjelaskan cara mengekspor dan mengimpor data ke instance Cloud SQL menggunakan pg_dump, pg_dumpall, dan pg_restore.

Sebelum memulai

Ekspor menggunakan resource database, tetapi tidak mengganggu operasi database normal, kecuali jika penyediaan instance kurang lengkap.

Untuk praktik terbaik, lihat Praktik Terbaik untuk Mengimpor dan Mengekspor Data.

Setelah menyelesaikan operasi impor, memverifikasi hasilnya.

Pelajari utilitas pg_dump, pg_dumpall, dan pg_restore lebih lanjut.

Mengekspor data dari Cloud SQL untuk PostgreSQL

Anda dapat menggunakan Cloud SQL untuk melakukan ekspor dari Google Cloud Console, gcloud CLI, atau API.

  • Untuk mengekspor satu database PostgreSQL, gunakan utilitas pg_dump.
  • Untuk mengekspor semua database PostgreSQL dari cluster, gunakan utilitas pg_dumpall.

Saat menggunakan salah satu utilitas, pastikan Anda juga menggunakan opsi yang diperlukan guna memastikan bahwa file ekspor yang dihasilkan valid untuk diimpor kembali ke Cloud SQL.

Mengekspor data dari server PostgreSQL lokal menggunakan pg_dump

Untuk mengekspor database yang tidak dikelola oleh Cloud SQL, untuk diimpor nanti ke Cloud SQL, gunakan utilitas pg_dump dengan flag berikut:

  • --no-owner

    Perintah perubahan kepemilikan tidak boleh disertakan dalam file dump.

  • --format

    Format custom dan directory diizinkan jika file dump ini dimaksudkan untuk digunakan dengan pg_restore.

    Untuk format plain-text, ekspor ke SQL dump file sebagai gantinya. Format ini tidak kompatibel dengan pg_restore, dan harus diimpor menggunakan perintah impor konsol Google Cloud atau klien psql.

  • --no-acl

    Flag ini diperlukan jika dump Anda akan berisi pernyataan untuk memberikan atau mencabut keanggotaan dalam peran SUPERUSER.

  • --clean

    Flag opsional ini memungkinkan Anda menyertakan pernyataan SQL DROP <object> yang diperlukan untuk menghapus (membersihkan) objek database sebelum mengimpornya.

  • --if-exists

    Flag opsional ini memungkinkan Anda menyertakan pernyataan SQL IF EXISTS dengan setiap pernyataan DROP yang dihasilkan oleh flag clean.

Selain itu, Anda harus menghapus semua hal berikut:

  • Pernyataan terkait ekstensi, jika Cloud SQL tidak mendukung ekstensi tersebut. Lihat Ekstensi PostgreSQL untuk daftar ekstensi yang didukung.
  • Pernyataan CREATE EXTENSION atau DROP EXTENSION yang merujuk plpgsql. Ekstensi ini sudah diinstal sebelumnya pada instance Postgres Cloud SQL.
  • Laporan COMMENT ON EXTENSION.

Pastikan encoding default, sebagaimana ditentukan oleh setelan database, sudah benar untuk data Anda. Jika diperlukan, Anda dapat mengganti default dengan flag --encoding.

Ekspor data menggunakan format custom dari Cloud SQL untuk PostgreSQL

Untuk menggunakan format kustom, jalankan pg_dump dari command line:

pg_dump \
-U USERNAME \
--format=custom \
--no-owner \
--no-acl \
DATABASE_NAME > DATABASE_NAME.dmp

Mengekspor data dari beberapa file secara paralel dari Cloud SQL untuk PostgreSQL

Anda hanya dapat menggunakan format output directory untuk mengekspor data dari beberapa file secara paralel.

Untuk mengekspor secara paralel, gunakan flag -j NUM_CORES. NUM_CORES adalah jumlah core pada instance sumber.

Mengekspor semua database

pg_dumpall adalah utilitas yang memungkinkan Anda mengekstrak semua database PostgreSQL dari sebuah cluster ke dalam satu file skrip. File ini memiliki perintah SQL yang dapat Anda gunakan untuk memulihkan database.

Untuk mengekspor semua database PostgreSQL di instance Cloud SQL, gunakan utilitas pg_dumpall dengan flag wajib berikut:

  • exclude-database=cloudsqladmin
  • exclude-database=template*

Utilitas pg_dumpall tidak memiliki akses ke database cloudsqladmin atau template.

Untuk mengekspor semua database PostgreSQL, jalankan perintah berikut:

pg_dumpall \
-h HOST_NAME -l DATABASE_NAME –exclude-database=cloudsqladmin \
–exclude-database=template* > pg_dumpall.sql

Untuk melihat sandi peran saat membuang peran dengan pg_dumpall, tetapkan flag cloudsql.pg_authid_select_role ke nama peran PostgreSQL. Jika ada, berarti peran tersebut memiliki akses hanya baca (SELECT) ke tabel pg_authid. Tabel ini berisi sandi peran.

Impor

Gunakan utilitas pg_restore untuk mengimpor arsip ke database Cloud SQL. pg_restore hanya berfungsi dengan arsip yang dibuat oleh pg_dump dalam format custom atau directory. Pelajari lebih lanjut pg_restore.

Mengimpor dari file dump yang dibuat dengan format custom ke Cloud SQL untuk PostgreSQL

Jika file dump dibuat dengan format kustom, jalankan perintah berikut:

pg_restore \
--list DATABASE_NAME.dmp | sed -E 's/(.* EXTENSION )/; \1/g' >  DATABASE_NAME.toc

Pasca-pemrosesan dari sed akan mengomentari semua laporan ekstensi dalam file dump SQL.

Saat mengimpor menggunakan pg_restore, tentukan daftar isi yang diproses dengan argumen command line "--use-list=DATABASE_NAME.toc".

Mengimpor data dari beberapa file secara paralel ke Cloud SQL untuk PostgreSQL

Anda dapat mengimpor data dari beberapa file secara paralel hanya untuk arsip yang dibuat menggunakan format output directory dan custom.

Untuk mengimpor secara paralel, gunakan flag -j NUM_CORES. NUM_CORES adalah jumlah core pada instance tujuan.

Mengimpor performa di Cloud SQL untuk PostgreSQL

Langkah selanjutnya