pg_restore: [archiver] tidak menemukan string ajaib di header file


13

Saya menggunakan PostgreSQL 9.1 dan ingin mengembalikan file cadangan yang dihasilkan dengan pg_dump:

sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

Perintah ini menghasilkan file sql yang valid yang dimulai dengan menjatuhkan objek database yang ada, kemudian menghasilkan semua tabel, mengindikasi, urutan dan sebagainya, dan akhirnya memasukkan data.

Ketika saya mencoba mengembalikan file cadangan yang dihasilkan dengan: (jeda baris ditambahkan hanya untuk tujuan tampilan)

sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql

gagal dan mencetak:

pg_restore: [archiver] did not find magic string in file header

Apa alasan untuk itu?

Jawaban:


19

Anda sedang memulihkan dengan pg_restore --format=c ...tetapi pg_dumptidak dilakukan dengan --format=c, itu dilakukan dengan format default, polos .

Dari pg_dumphalaman manual:

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

Dump dalam format biasa harus diumpankan langsung ke psqlalat baris perintah, pg_restoretidak tahu apa itu, yang merupakan alasan pesan kesalahan ini: tidak menemukan string ajaib di header file .

Anda dapat melihat langsung pada file dump dengan more out.sqldi shell dan Anda akan melihat perintah SQL yang dapat dibaca. Kembalikan dengan psql -f out.sql [other options]. Anda mungkin ingin membuat basis data target terlebih dahulu, karena --createopsi tidak ada dalam pg_dumpdoa.

Di sisi lain, Anda dapat menginstal kembali dump yang ditambahkan --format=cke opsinya. Maka itu akan menjadi sebaliknya: pg_restoreharus digunakan untuk menafsirkan file dump dalam format khusus.


0

Salah satu masalah yang mungkin terjadi adalah file data Anda terpotong. Periksa untuk melihat apakah Anda mengunduh file lengkap dengan membandingkan ukuran file.


0

Jika Anda menggunakan git-lfs, pastikan untuk memiliki file yang sebenarnya, bukan pointer!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.