pg_restore: [archiver] ไม่พบสตริงมายากลในส่วนหัวของไฟล์


13

ฉันใช้ PostgreSQL 9.1 และต้องการกู้คืนไฟล์สำรองที่สร้างด้วยpg_dump:

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

คำสั่งนี้สร้างไฟล์ sql ที่ถูกต้องที่เริ่มต้นด้วยการปล่อยวัตถุฐานข้อมูลใด ๆ ที่มีอยู่จากนั้นสร้างตารางทั้งหมดบ่งบอกลำดับและอื่น ๆ และในที่สุดก็แทรกข้อมูล

เมื่อฉันพยายามกู้คืนไฟล์สำรองที่สร้างด้วย: (เพิ่มตัวแบ่งบรรทัดเพื่อวัตถุประสงค์ในการแสดงผลเท่านั้น)

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

มันล้มเหลวและพิมพ์:

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

อะไรคือเหตุผลสำหรับสิ่งนั้น?

คำตอบ:


19

คุณกำลังกู้คืนด้วยpg_restore --format=c ...แต่ยังpg_dumpไม่เสร็จด้วย--format=cมันทำกับรูปแบบเริ่มต้น ธรรมดา

จากpg_dumpmanpage:

  -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).

การถ่ายโอนข้อมูลในรูปแบบธรรมดาควรจะเลี้ยงโดยตรงกับpsqlเครื่องมือบรรทัดคำสั่ง, pg_restoreไม่ทราบว่ามันคืออะไรซึ่งเป็นเหตุผลของข้อผิดพลาดนี้: ไม่พบสตริงมายากลในส่วนหัวของแฟ้ม

คุณสามารถดูไฟล์ดัมพ์โดยตรงmore out.sqlในเชลล์และคุณจะเห็นคำสั่ง SQL ที่อ่านได้ psql -f out.sql [other options]คืนค่าด้วย คุณอาจต้องการสร้างฐานข้อมูลเป้าหมายก่อนเนื่องจากไม่มี--createตัวเลือกในการpg_dumpเรียกใช้

ในอีกทางหนึ่งคุณอาจเรียกคืนการถ่ายโอนข้อมูลที่เพิ่ม--format=cไปยังตัวเลือก จากนั้นจะเป็นสิ่งตรงกันข้าม: pg_restoreต้องใช้เพื่อแปลไฟล์ดัมพ์ในรูปแบบที่กำหนดเอง


0

ปัญหาที่เป็นไปได้อย่างหนึ่งคือไฟล์ข้อมูลของคุณถูกตัดทอน ตรวจสอบว่าคุณกำลังดาวน์โหลดไฟล์เต็มโดยการเปรียบเทียบขนาดไฟล์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.