mengembalikan database Postgres: pg_restore -vs- hanya menggunakan psql

16

Saya membuang database Postgres saya menggunakan pg_dump (dalam format teks biasa) dan kemudian mengembalikannya hanya dengan menggunakan psql (dengan -fopsi).

Yang menimbulkan pertanyaan: apakah saya kehilangan sesuatu dengan tidak menggunakan pg_restore yang sepertinya alat pemulihan khusus (dibandingkan dengan generik psql)?

Saya dapat mengontrol opsi seperti menonaktifkan pemicu dan lainnya dengan menggunakan pg_dumpparameter. Lalu, pg_restoreuntuk apa digunakan? format dump non-teks biasa?

Marcus Junius Brutus
sumber
4
Dari manual : " pg_restore adalah utilitas untuk memulihkan database PostgreSQL dari arsip yang dibuat oleh pg_dump dalam salah satu format non-teks-polos "
a_horse_with_no_name

Jawaban:

19

Jika Anda membuat dump format-SQL, yang dapat Anda gunakan adalah psql.

Jika Anda membuat dump format-format ( pg_dump -Fc) atau direktori-format ( pg_dump -Fd), Anda dapat dan harus menggunakan pg_restore.

Kesedihan format kustom dan direktori menawarkan banyak keunggulan dibandingkan kesedihan skrip SQL biasa, dan saya menggunakannya secara eksklusif. Anda dapat secara selektif mengembalikan hanya beberapa tabel / skema, dapat memilih apakah hanya menyertakan skema, hanya data, atau keduanya pada waktu pemulihan, dll. Banyak opsi yang harus Anda tentukan pada pg_dumpwaktu dengan dump format-SQL dapat dipilih di restore- waktu jika Anda menggunakan dump format-kustom dan pg_restore.

Jika bukan karena kompatibilitas ke belakang, saya yakin format defaultnya pg_dumpadalah -Fc(kustom).

Anda tidak dapat mengubah dump format-SQL ke format-kustom atau format-direktori tanpa mengembalikannya ke database PostgreSQL dan kemudian membuang DB yang dipulihkan.

Craig Ringer
sumber
Apakah mungkin juga untuk menamai ulang fungsi dan melakukan manipulasi data seperti yang Anda bisa dalam file sql dengan regexp yang baik?
buka
1
Tidak, tetapi Anda bisa pg_restoretanpa dbnameargumen untuk mengubahnya menjadi dump format-SQL jika Anda membutuhkannya. Anda tidak dapat melakukan yang sebaliknya.
Craig Ringer
@CraigRinger apakah ada perbedaan kecepatan menggunakan psql vs menggunakan pg_dump untuk mengembalikan?
Nikunj Sardhara
2
@NikunjSardhara Tidak biasanya, tetapi pg_restoremendukung pemulihan paralel, dan jika Anda menggunakannya akan jauh lebih cepat.
Craig Ringer