pg_dump adalah alat backup logis yang disediakan oleh PolarDB for PostgreSQL (Compatible with Oracle). Anda dapat menggunakannya untuk mencadangkan satu database dalam sebuah kluster ke dalam file skrip atau arsip lainnya.
Pendahuluan
pg_dump digunakan untuk mencadangkan satu database. Alat ini menghasilkan backup konsisten meskipun database sedang aktif, tanpa memblokir akses pengguna lain (baik untuk membaca maupun menulis). Untuk informasi lebih lanjut, lihat situs web resmi pg_dump.
Alat pg_dump dalam PolarTools berbeda dari versi komunitas. Versi PolarTools telah disesuaikan untuk PolarDB for PostgreSQL (Compatible with Oracle). Penggunaan versi komunitas pg_dump dapat menyebabkan error tak terduga atau backup data yang tidak lengkap.
Format file backup
File skrip: File skrip adalah file teks biasa yang berisi perintah SQL untuk memulihkan database ke kondisinya pada saat backup dilakukan.
archive file: archive file harus dipulihkan dengan pg_restore.
Format output file mencakup format custom -Fc, format direktori -Fd, dan format arsip tar -Ft. Format -Fc dan -Fd memungkinkan pemilihan dan pengaturan ulang semua item yang diarsipkan serta dikompresi secara default. Format -Ft tidak dikompresi dan tidak mendukung pengubahan urutan saat memulihkan data.
CatatanFormat direktori adalah satu-satunya format yang mendukung parallel backup.
Ketika digunakan dengan salah satu format arsip, pg_dump dapat mencadangkan seluruh database. Anda dapat menggunakan pg_restore untuk memeriksa arsip atau memilih bagian tertentu dari database yang akan dipulihkan.
Sintaks
pg_dump [connection-option...] [option...] [dbname]Tabel 1. Parameter
Parameter | Deskripsi |
connection-option | Opsi baris perintah yang mengontrol parameter koneksi database. Untuk detailnya, lihat Opsi koneksi. |
option | Opsi baris perintah yang mengontrol konten dan format keluaran. Untuk detail, lihat Opsi Dump. |
dbname | Nama database yang akan dibackup. |
Tabel 2. Opsi koneksi
Opsi baris perintah | Deskripsi |
-d dbname atau --dbname=dbname | Menentukan nama database yang akan dihubungi. |
-h host atau --host=host | Menentukan hostname komputer tempat server berjalan. Jika nilai ini dimulai dengan garis miring, nilai tersebut digunakan sebagai direktori untuk socket domain UNIX. Nilai default-nya adalah variabel lingkungan PGHOST. |
-p port atau --port=port | Menentukan port TCP atau ekstensi file socket domain UNIX lokal tempat server mendengarkan koneksi. Nilai default diambil dari variabel lingkungan PGPORT, atau nilai default bawaan digunakan jika variabel ini tidak diatur. |
-U username atau --username=username | Username yang digunakan untuk koneksi. |
-w adalah alias untuk --no-password | Tidak pernah menampilkan prompt password. |
-W adalah bentuk singkat dari --password. | Memaksa pg_dump untuk meminta password sebelum menghubungkan ke database. Catatan Opsi ini bersifat opsional. |
--role=rolename | Menentukan nama role yang digunakan untuk membuat backup. |
Tabel 3. Opsi dump
Opsi baris perintah | Deskripsi |
dbname | Nama database yang akan dibackup. Jika tidak ditentukan, variabel lingkungan PGDATABASE akan digunakan. |
-a adalah alias untuk --data-only | Hanya melakukan backup data, bukan schema (definisi data). Catatan Opsi ini melakukan backup data tabel, blob, dan nilai sequence. |
-b adalah alias untuk --blobs | Blob secara default disertakan dalam backup. Ketika opsi --schema, --table, atau --schema only ditentukan, blob tidak disertakan dalam backup. Penting Karena blob dianggap sebagai data, blob disertakan dalam backup jika Anda menggunakan opsi --data-only, tetapi dikecualikan jika Anda menggunakan opsi --schema-only. |
-B adalah alias untuk --no-blobs | Mengecualikan blob dari backup. Catatan Jika kedua opsi -b dan -B ditentukan, backup akan menyertakan blob. |
-c adalah alias untuk --clean | Menghapus objek database sebelum menjalankan perintah untuk membuatnya. Untuk menghindari pesan error saat memulihkan database, kami menyarankan Anda menentukan opsi --if exists. Catatan Opsi ini hanya berlaku untuk file skrip. Untuk file arsip, Anda dapat menentukan opsi ini saat memanggil pg_restore. |
-C atau --create | Membuat database dan terhubung kembali ke database yang baru dibuat. Jika opsi --clean ditentukan, skrip akan menghapus dan membuat ulang database target, lalu terhubung kembali ke database tersebut. Jika opsi --create ditentukan dan opsi --no-acl tidak ditentukan, data backup mencakup komentar, informasi konfigurasi, dan hak akses database. Catatan Opsi ini hanya berlaku untuk file skrip. Untuk file arsip, Anda dapat menentukan opsi ini saat memanggil pg_restore. |
-E encoding atau --encoding=encoding | Membuat backup menggunakan pengkodean karakter yang ditentukan. Secara default, backup dibuat menggunakan pengkodean karakter dari database yang ingin Anda backup. Anda juga dapat mengatur nilai variabel lingkungan PGCLIENTENCODING ke pengkodean backup yang diinginkan. |
-F format atau --format=format | Menentukan format output. Format yang tersedia adalah sebagai berikut:
|
-f file atau --file=file | Mengirimkan output ke file yang ditentukan.
|
-j njobs atau --jobs=njobs | Opsi ini menjalankan backup secara paralel dengan melakukan backup Catatan Sebelum memulai backup paralel, hentikan proses yang memodifikasi database, seperti proses yang melibatkan DDL dan DML. |
-n pattern adalah bentuk singkat dari --schema=pattern. | Hanya melakukan backup schema yang sesuai dengan pola. Jika opsi ini tidak ditentukan, semua schema non-sistem dalam database target akan dibackup. Catatan
|
-N pattern adalah alias untuk --exclude-schema=pattern | Membackup schema selain yang sesuai dengan pola. Catatan
|
-o atau --oids | Membackup object identifier (OID) sebagai bagian dari data untuk setiap tabel. Gunakan opsi ini jika aplikasi Anda mereferensikan kolom OID, misalnya dalam kendala kunci asing. Jika tidak, jangan gunakan opsi ini. |
-O adalah bentuk singkat dari --no-owner | Tidak menyertakan perintah untuk mengatur kepemilikan objek agar sesuai dengan database aslinya. Catatan Opsi ini hanya berlaku untuk file skrip. Untuk file arsip, Anda dapat menentukan opsi ini saat memanggil pg_restore. |
-s adalah bentuk singkat dari --schema-only | Hanya melakukan backup definisi objek (schema), bukan data. |
-S username sama dengan --superuser=username | Username superuser yang digunakan saat menonaktifkan pemicu. Opsi ini hanya digunakan bersama dengan --disable-triggers. |
-t pattern, atau --table=pattern | Hanya melakukan backup tabel yang sesuai dengan pola. Anda dapat memilih beberapa tabel dengan menentukan opsi -t beberapa kali atau menggunakan wildcard dalam pola. Catatan Ketika Anda menentukan -t, pg_dump tidak mencoba melakukan backup objek database lain yang mungkin menjadi dependensi dari tabel yang dipilih. Oleh karena itu, tidak ada jaminan bahwa backup tabel tertentu dapat dipulihkan secara sukses ke database kosong. |
-T pattern adalah alias untuk --exclude-table=pattern | Tidak melakukan backup tabel yang sesuai dengan pola. Anda dapat menentukan opsi -T beberapa kali untuk mengecualikan tabel yang sesuai dengan beberapa pola. Catatan
|
-v atau --verbose | Menentukan mode verbose. |
-V adalah alias untuk --version | Menampilkan versi pg_dump dan keluar. |
-x adalah alias untuk --no-privileges atau --no-acl | Mencegah backup hak akses (perintah grant/revoke). |
-Z 0..9 sama dengan --compress=0..9 | Menentukan tingkat kompresi yang digunakan. Nilai 0 berarti tanpa kompresi. Catatan
|
--column-inserts and --attribute-inserts | Membackup data sebagai perintah |
--disable-dollar-quoting | Menonaktifkan penggunaan dollar quoting untuk isi fungsi. |
--disable-triggers | Sementara menonaktifkan pemicu pada tabel target. Opsi ini hanya efektif saat membuat backup data. Saat menggunakan opsi ini, Anda harus menentukan superuser dengan menggunakan -S. Catatan Opsi ini hanya berlaku untuk file skrip. Untuk file arsip, Anda dapat menentukan opsi ini saat memanggil pg_restore. |
--enable-row-security | Hanya melakukan backup bagian tabel yang memiliki izin akses. Opsi ini hanya efektif saat melakukan backup konten tabel yang memiliki row-level security diaktifkan. Penting Jika Anda menggunakan opsi ini, Anda mungkin juga perlu menggunakan INSERT untuk membuat backup karena COPY FROM tidak mendukung row-level security selama pemulihan data. |
--exclude-table-data=pattern | Tidak melakukan backup data tabel yang sesuai dengan pola. Anda dapat menentukan --exclude-table-data beberapa kali untuk mengecualikan tabel yang sesuai dengan beberapa pola. Catatan Untuk mengecualikan data dari semua tabel dalam database, lihat --schema only. |
--if-exists | Menggunakan perintah kondisional, seperti menambahkan klausa IF EXISTS, untuk membersihkan objek database. Anda juga harus menentukan opsi --clean, jika tidak opsi ini tidak berpengaruh. |
--inserts | Membackup data sebagai perintah INSERT. Penting Jika Anda menggunakan opsi ini, pengubahan urutan data selama pemulihan dapat menyebabkan operasi gagal. Kami menyarankan menggunakan --column-inserts . |
--load-via-partition-root | Menggunakan perintah COPY atau INSERT untuk membackup data dari partisi tabel. Catatan Gunakan pemulihan paralel dengan hati-hati saat memulihkan file arsip yang dibuat dengan opsi ini. |
--lock-wait-timeout=timeout | Menentukan waktu tunggu untuk mendapatkan shared lock. |
--no-comments | Tidak melakukan backup komentar. |
--no-publications | Tidak mencadangkan publikasi. |
--no-security-labels | Tidak melakukan backup security label. |
--no-subscriptions | Tidak melakukan backup subscription. |
--no-sync | Kembali tanpa menunggu semua file ditulis ke disk secara aman. |
--no-synchronized-snapshots | Menunjukkan bahwa Anda dapat menjalankan pg_dump -j di server. |
--no-tablespaces | Membuat semua objek di tablespace default. Catatan Opsi ini hanya berlaku untuk file skrip. Untuk file arsip, Anda dapat menentukan opsi ini saat memanggil pg_restore. |
--no-unlogged-table-data | Tidak melakukan backup konten tabel unlogged. |
--quote-all-identifiers | Memaksa pengutipan semua identifier. |
--rows-per-insert=nrows | Mengontrol jumlah maksimum baris per pernyataan INSERT dalam backup database. |
--section=sectionname | Menentukan bahwa hanya bagian yang ditentukan yang akan dibackup. Nama bagian dapat berupa pre-data, data, atau post-data. Anda dapat menentukan opsi ini beberapa kali untuk memilih beberapa bagian. Secara default, semua bagian dibackup. Catatan
|
--serializable-deferrable | Menggunakan transaksi serializable untuk backup. Catatan
|
--snapshot=snapshotname | Menggunakan snapshot tersinkronisasi yang ditentukan saat melakukan backup database. |
--strict-names | Mengharuskan setiap pola schema (-n atau --schema) dan tabel (-t atau --table) mencocokkan setidaknya satu schema atau tabel dalam database sumber. Catatan
|
--use-set-session-authorization | Menghasilkan perintah standar SQL SET SESSION AUTHORIZATION alih-alih perintah ALTER OWNER. |
-? atau --help | Menampilkan bantuan untuk argumen baris perintah pg_dump lalu keluar. |
Catatan penggunaan
Jika Anda memilih tabel yang hanya digunakan untuk backup data dan menggunakan opsi --disable-triggers,
pg_dumpmengeluarkan perintah untuk menonaktifkan pemicu tabel pengguna sebelum memasukkan data dan mengaktifkannya kembali setelah data dimasukkan. Jika proses pemulihan terganggu, katalog sistem mungkin tertinggal dalam kondisi yang tidak konsisten.Setelah file backup dipulihkan, Anda dapat menjalankan perintah ANALYZE untuk memastikan kinerja optimal.
Saat mencadangkan langganan replikasi logis, pg_dump menghasilkan perintah CREATE SUBSCRIPTION dengan opsi connect=false. Jika host berubah, Anda mungkin perlu memperbarui informasi koneksi, dan sebaiknya memotong tabel target sebelum memulai salinan tabel penuh baru.
Karena pg_dump secara internal menjalankan pernyataan SELECT, jika Anda mengalami masalah saat menjalankannya, pastikan Anda dapat mengkueri informasi dari database menggunakan alat seperti psql. Selain itu, pastikan semua pengaturan koneksi default dan variabel lingkungan yang digunakan oleh pustaka frontend libpq berfungsi dengan benar.
Pengumpul statistik biasanya mencatat aktivitas database selama eksekusi pg_dump, tetapi jika hal ini tidak diperlukan, Anda dapat menggunakan perintah PGOPTIONS atau ALTER USER untuk mengatur parameter track_counts menjadi false.
Contoh
Jalankan perintah berikut untuk mencadangkan database bernama
mydbke file skrip SQL:pg_dump mydb > db.sqlJalankan perintah berikut untuk memuat ulang skrip SQL ke database baru bernama
newdb:psql -d newdb -f db.sqlJalankan perintah berikut untuk mencadangkan database ke file arsip format custom:
pg_dump -Fc mydb > db.dumpJalankan perintah berikut untuk mencadangkan sebuah database ke dalam format direktori file arsip:
pg_dump -Fd mydb -f dumpdirJalankan perintah berikut untuk mencadangkan database secara paralel dengan 5 job pekerja ke file arsip format direktori:
pg_dump -Fd mydb -j 5 -f dumpdirJalankan perintah berikut untuk memulihkan file arsip ke database baru bernama
newdb:pg_restore -d newdb db.dumpJalankan perintah berikut untuk memulihkan file arsip ke database asal tempat backup diambil, dengan membersihkan konten saat ini dari database tersebut:
pg_restore -d postgres --clean --create db.dumpJalankan perintah berikut untuk mencadangkan satu tabel bernama
mytab:pg_dump -t mytab mydb > db.sqlJalankan perintah berikut untuk mencadangkan semua tabel dalam schema
detroityang namanya diawali dengan emp, kecuali tabel bernamaemployee_log:pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sqlJalankan perintah berikut untuk mencadangkan semua schema yang namanya diawali dengan east atau west dan diakhiri dengan gsm (tidak termasuk schema yang namanya mengandung test):
pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sqlPerintah berikut menggunakan ekspresi reguler untuk mencapai hasil yang sama secara lebih ringkas:
pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sqlJalankan perintah berikut untuk mencadangkan semua objek database kecuali tabel yang namanya diawali dengan ts_:
pg_dump -T 'ts_*' mydb > db.sqlJika Anda perlu menentukan nama dengan huruf kapital atau campuran dalam opsi -t dan opsi terkait lainnya, Anda harus membungkus nama tersebut dalam tanda kutip ganda. Jika tidak, nama tersebut akan diubah menjadi huruf kecil. Namun, tanda kutip ganda merupakan karakter khusus untuk shell, sehingga Anda juga harus meng-escape-nya. Oleh karena itu, untuk mencadangkan satu tabel dengan nama campuran, jalankan perintah berikut:
pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql