file masukan tampaknya merupakan dump format teks. Harap gunakan psql

91

Saya mengambil cadangan menggunakan

pg_dump db_production > postgres_db.dump

dan kemudian saya salin ke localhost menggunakan scp.

Sekarang ketika saya mengimpor di db lokal saya, itu memberikan kesalahan

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

dengan menggunakan baris perintah

pg_restore -d db_development postgres_db.dump
Haseeb Ahmad
sumber

Jawaban:

134

Dari pg_dumpdokumentasi:

Contoh

Untuk membuang database yang disebut mydb ke dalam file skrip SQL :

$ pg_dump mydb > db.sql

Untuk memuat ulang skrip tersebut ke dalam database (yang baru dibuat) bernama newdb :

$ psql -d newdb -f db.sql

Untuk membuang database ke dalam file arsip format kustom:

$ pg_dump -Fc mydb > db.dump

Untuk membuang database ke dalam arsip format direktori:

$ pg_dump -Fd mydb -f dumpdir

Untuk memuat ulang file arsip ke dalam database (yang baru dibuat) bernama newdb:

$ pg_restore -d newdb db.dump

Dari pg_restoredokumentasi:

Contoh

Asumsikan kita telah membuang database yang disebut mydb ke dalam file dump format-kustom:

$ pg_dump -Fc mydb > db.dump

Untuk menjatuhkan database dan membuatnya kembali dari dump:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump
Зелёный
sumber
2
ketika saya melakukan pg_restore saya mendapatkan pg_restore: file input [pengarsip] tampaknya menjadi dump format teks. Harap gunakan psql.
Haseeb Ahmad
Yang mana yang saya gunakan untuk memulihkan db?
Haseeb Ahmad
67
ini tidak menjawab pertanyaan
dopatraman
1
cara untuk memulihkan dari file teks checkout serverfault.com/questions/260607/...
Chrs
5
IMO posting ini memiliki terlalu banyak detail yang mengaburkan jawabannya. Apa yang gagal ditunjukkan oleh penulis adalah bahwa dokumentasi pg_dump untuk parameter '-F' tidak menyebutkan format default ('p' / 'plain') sesuai untuk pg_restore. pg_restore mengharuskan pg_dump digunakan dengan format 'c', 'd', atau 't'.
Matt
59

Jawaban di atas tidak berhasil untuk saya, ini berhasil:

psql db_development < postgres_db.dump

Uziel Valdez
sumber
Pendek dan manis. Bekerja untuk saya juga.
Murid
11

Bagi saya ketika saya mencoba memulihkan dari host jarak jauh yang saya gunakan

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

bekerja dengan baik. Dan jika tidak remote hanya mengikuti perintah bekerja.

psql -d database < db.dump
Tserenjamts
sumber
7

Untuk membuat cadangan menggunakan pg_dumpyang kompatibel dengan pg_restoreAnda harus menggunakan --format=custom/ -Fcsaat membuat dump Anda.

Dari dokumen:

Keluarkan arsip format khusus yang cocok untuk dimasukkan ke pg_restore.

Jadi pg_dumpperintah Anda mungkin terlihat seperti:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

Dan pg_restoreperintah Anda :

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump
Tim Fletcher
sumber
6

Bagi saya, ini berfungsi seperti ini. C: \ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d dummy -f C: \ Users \ Downloads \ d2cm_test.sql

RAJNISH YADAV
sumber
2
Jawaban sederhana dan bermanfaat!
Rax Weber
1
Terima kasih @RAJNISH YADAV.
Amit
0

jika Anda menggunakan pg_dump dengan -Fp untuk membuat cadangan dalam format teks biasa, gunakan perintah berikut:

cat db.txt | psql dbname

untuk menyalin semua data ke database Anda dengan nama dbname

M2E67
sumber
0

Jika Anda memiliki dump DB lengkap:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

Namun, jika Anda memiliki skema yang disimpan secara terpisah, itu tidak akan berhasil. Maka Anda harus menonaktifkan pemicu untuk penyisipan data, seperti pg_restore --disable-triggers. Anda kemudian dapat menggunakan ini:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

Di samping catatan, ini adalah sisi negatif postgres yang sangat disayangkan, menurut saya. Cara default untuk membuat dump in pg_dumptidak kompatibel dengan pg_restore. Dengan beberapa kunci tambahan, bagaimanapun, itu benar. WTF?

VasiliNovikov
sumber