Saya telah menggunakan pg_dump pada satu mesin dan menyalin file hasil ke yang lain, di mana saya mencoba mengembalikannya. Saya percaya skema itu sama. Namun, saya mendapatkan:
pg_restore: [archiver] input file does not appear to be a valid archive
Saya telah melakukan operasi berikut:
pg_dump -a -f db.txt dbname
dan:
pg_restore -a -d dbname db.txt
Apa yang salah?
postgresql
gruszczy
sumber
sumber
Jawaban:
Anda membuang dalam format sql sederhana yang dirancang untuk memberi makan ke psql. Ini tidak dikenali oleh pg_restore.
harus melakukan trik
sumber
psql dbname < db.txt
;)pg_dump
secara default menciptakan perintah sql yang diperlukan untuk membuat ulang data. Untuk memulihkannya, Anda hanya perlu memohonpsql
(tidakpg_restore
) dengan file sebagai input.pg_restore
hanya digunakan untuk format biner (tidak default, dan kurang biasatidak disarankan) daripg_dump
. Baca dokumen .Pembaruan:
pg_dump
Format biner (-Fc
-Ft
) yang akan digunakanpg_restore
adalah ok, dan menawarkan fleksibilitas ekstra. Tetapi mereka kurang standar (non SQL), kurang tepat untuk mengimpor dari beberapa alat (misalnya frontend php) atau memanipulasi dengan editor teks, dan sedikit kurang portabel untuk versi lain dan bahkan database lain. Untuk cadangan, saya tetap menggunakan format polos standar. Untuk skenario lain, opsi binary + pg_restore bisa sama atau lebih tepat.Yang perlu diperhatikan adalah bahwa dalam Postgresql, dalam skenario tipikal , pencadangan biasanya dilakukan oleh pg_dump (polos) dan pemulihan dengan klien baris perintah standar ( psql ).
sumber
Coba lewati
--format=c
opsi untukpg_dump
. Ini akan memungkinkanpg_restore
untuk mengembalikannya.sumber
pg_restore: [archiver] did not find magic string in file header
jadi ini tidak bekerja untuk dump sql sederhanapg_dump --format=c ...> archivefile
, dan kemudian menggunakanpg_restore
padaarchivefile
, maka (setidaknya ketika saya diuji sekarang) bekerja dengan baik. Mungkin file Anda rusak entah bagaimana? Atau Anda telah menemukan bug tertentu?Inilah yang akan saya lakukan untuk membuat cadangan basis data lama dan memulihkan
Untuk membuat cadangan basis data Anda
Untuk memulihkan cadangan itu
Baca lebih lanjut tentang pg_dump dan pg_restore
sumber
Untuk pengguna windows coba
Bekerja seperti pesona
sumber
Anda dapat melakukan sesuatu terhadap
SOURCE
perintah MySQL :Kemudian, di terminal postgresql:
sumber
cat dumpFileName | psql -h ip -d dbName -U nama pengguna -W
sumber
Pesan kesalahan ini juga bisa berarti bahwa sebenarnya ada yang salah dengan file cadangan (atau asumsi Anda tentangnya).
Dalam satu kasus, saya telah memasang file cadangan di wadah Docker dan mencoba memulihkan, tetapi gagal dengan
does not appear to be a valid archive
. Dan faktanya, file itu kosong, karena mount tidak dilakukan dengan benar.sumber