รับ“ [archiver] เวอร์ชันที่ไม่รองรับ (1.13) ในส่วนหัวของไฟล์” เมื่อเรียกใช้ pg_restore


165

ฉันเพิ่งอัพเกรดเป็น postgres 10.2 บน mac os ซึ่งตรงกับ 10.2 บน heroku ฉันพยายามดาวน์โหลดสำเนาของฐานข้อมูลและกู้คืนในเครื่อง ก่อนการอัพเกรดการคืนค่าจะทำงานได้ดี

ฉันวิ่ง

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d database_name backup.dump

แต่ฉันได้รับข้อผิดพลาดนี้:

pg_restore: [archiver] รุ่นที่ไม่สนับสนุน (1.13) ในส่วนหัวของไฟล์

ฐานข้อมูลดูเหมือนว่าจะทำงานตกลง มันเป็นแอพพลิเคชั่นทางรถไฟและฉันอัพเกรด pg gems ฉันวิ่งได้rake db:createและdb:migrateก็สบายดี

คำตอบ:


196

คุณต้องอัปเกรด postgres ในพื้นที่ของคุณเพื่อรับ Patch ความปลอดภัยล่าสุดจาก 2018-03-01 เช่นเดียวHerokuกับวันที่ 1 มีนาคม คุณจำเป็นต้องใช้ของรุ่นสุดท้าย10.3, 9.6.8, 9.5.12, และ9.4.179.3.22

แพทช์รักษาความปลอดภัยสามารถพบได้ที่นี่https://www.postgresql.org/about/news/1834/

ดูเหมือนว่าแพทช์แก้ไข pg_dump นั่นอาจเป็นเหตุผลว่าทำไมเราไม่สามารถใช้ pg_restore ได้อีกต่อไปหากไม่มีแพตช์นั้นสำหรับการถ่ายโอนข้อมูลของ Heroku (ด้วยการใช้แพตช์)


87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3

2
ใช้ Linux Mint เวอร์ชันของฉันคือ 9.5.11 และมันบอกว่าทันสมัย ฉันจะบังคับให้ใช้เวอร์ชันล่าสุดโดยใช้ apt-get ได้อย่างไร
Kritz

Postgresql 9.5.12 ขณะนี้อยู่ใน Ubuntu 16.04 อย่างเป็นทางการของ xenial repo packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel

6
ความคิดเห็นของ @ gerry3 เป็นสองคำสั่งแยกกัน ระวังการคัดลอกและ paster!
Joe Masilotti

4
หัวขึ้นสองคำสั่งbrew upgrade postgresql && brew postgresql-upgrade-databaseจะแก้ไขปัญหาแน่นอน แต่ฐานข้อมูลท้องถิ่นของฉันถูกทิ้งไปพร้อมกัน สำรองข้อมูลหากคุณมีข้อมูลสำคัญ!
Jarvis Johnson

19

ฉันพบปัญหาเดียวกันนี้ในวันนี้ฉันไม่รู้ว่ามีอะไรเปลี่ยนแปลงในด้านของ Heroku หรือไม่เพราะในท้องถิ่นฉันใช้ 9.6 แต่ฐานข้อมูลของฉันใน Heroku คือ 9.4 ดังนั้นจึงดูเหมือนว่าจะไม่เกี่ยวกับความแตกต่างของรุ่นจุด ทำงานมาจนถึงทุกวันนี้)

หากคุณใช้ Postgres.app ( https://postgresapp.com/ ) บน Mac โปรดตรวจสอบให้แน่ใจว่าคุณใช้งานอยู่v2.1.3(จากการเขียนที่เป็นเวอร์ชั่นล่าสุด) เมื่อคุณอัพเกรด Postgres.app คุณจะได้รับการเปิดตัวโปรแกรมแก้ไขล่าสุดของ Postgres (ซึ่งอาจทำให้เกิดความไม่ตรงกันที่คุณกำลังประสบอยู่ในปัจจุบัน - Heroku ได้อัปเกรดเป็นแพตช์รักษาความปลอดภัยล่าสุดและเครื่องท้องถิ่นของคุณอาจไม่มี)

ฉันต้องอัพเกรด Postgres.app จาก 2.1.0 เป็น 2.1.3 และแก้ปัญหาได้แล้ว


12

ตั้งแต่เมื่อวาน (03/01/2018) เรายังประสบปัญหาในการกู้คืนข้อมูลสำรองจาก Heroku ที่ทำงานบน PostgreSQL 9.5:

pg_restore: [archiver] unsupported version (1.13) in file header

การอัพเกรดรุ่น PostgreSQL ของเราจาก 9.5.11 เป็น 9.5.12 แก้ไขปัญหา


12

ครั้งแรกที่ฉันมีปัญหานี้นี่คือวิธีที่ฉันกู้คืนฐานข้อมูล Heroku เป็น Local:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>

heroku pg:pullวิธีแก้ปัญหาที่ดีผมไม่ทราบเกี่ยวกับ แต่นี่ไม่ใช่การแก้ไขที่เหมาะสมเนื่องจากคุณยังไม่สามารถกู้คืนการถ่ายโอนข้อมูล heroku ก่อนหน้านี้ในเครื่องได้ฉันคิดว่านี่เป็นการใช้ทรัพยากรฐานข้อมูลสดขณะดึง
demental

1
ไม่แน่ใจว่าสิ่งที่ downvotes มีไว้เพื่ออะไร OP ขออย่างแท้จริง "ฉันพยายามดาวน์โหลดสำเนาของฐานข้อมูลและกู้คืนในเครื่อง" และฉันตอบคำถามนั้น
Jim Padilla

7

สำหรับผู้ที่พยายามอัพเกรด postgresql ใน Ubuntu โดยไม่ประสบความสำเร็จ (เช่น Johan แสดงความคิดเห็นข้างต้น) ให้ลองใช้คลังเก็บ apt PostgreSQL ตามที่ระบุไว้ในคำแนะนำการดาวน์โหลด PostgreSQL อย่างเป็นทางการ: https://www.postgresql.org/download/linux/ubuntu /

deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update

6

การแก้ไขสำหรับฉันเกี่ยวข้องกับทั้งสองอัปเดต Postgres.app ของฉันและอัปเดตโฮมบรูว์ PostgreSQL ในพื้นที่ของฉัน

อัปเดต Postgres.app ของฉันผ่านคำตอบของ Canuk:

เปิด Postgres.app> ตรวจสอบการอัปเดต ...

อัปเดตโฮมบรูว์ท้องถิ่นของฉัน PostgreSQL ผ่านความคิดเห็นของ gerry3 ในคำตอบที่ยอมรับ:

brew upgrade postgresql brew postgresql-upgrade-database


ฉันไม่ต้องอัปเดต Homebrew PostgreSQL ของฉัน การอัปเดต Postgres.app เป็นเวอร์ชันล่าสุดนั้นเพียงพอแล้ว
mineralwasser

อัปเดตจาก postgres.app แก้ไขปัญหาของฉัน
FutoRicky

6

มีปัญหานี้ใน Windows โดยใช้ pgAdmin 3

การอัปเกรดจาก pgAdmin 3 เป็น pgAdmin 4 แก้ปัญหาให้ฉันได้

หากคุณใช้เครื่องมือของบุคคลที่สามเช่น PgAdmin เพื่อเรียกคืนไฟล์ดัมพ์ที่ให้มาการกู้คืนอาจไม่สำเร็จแม้จะมีเวอร์ชัน Postgres ที่ติดตั้งแล้วซึ่งเป็นเวอร์ชันล่าสุด นี่เป็นเพราะเครื่องมือของบุคคลที่สามมักจะรวมไบนารี pg_restore รุ่นของตัวเองซึ่งอาจไม่ทันสมัย https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore


ขอบคุณสิ่งนี้ใช้ได้สำหรับฉัน ฉันใช้ PostgreSQL 9.5.12 และฉันใช้ pgAdmin 3. pgAdmin 4 สามารถทำงานได้pg_restoreสำเร็จ
Alexander

5

ฉันไม่แนะนำให้อัพเกรด DB ของคุณเป็นเวอร์ชันหลักใหม่ในเครื่อง (ใช้แพตช์รักษาความปลอดภัย) เพื่อแก้ไขปัญหานี้ตามที่คุณต้องการเพื่อให้ตรงกับเวอร์ชันใด ๆ ที่คุณมีในการผลิต

สิ่งนี้แก้ไขได้บน Ubuntu 16.04 ซึ่งกู้คืนจากฐานข้อมูล Heroku

ขั้นแรกให้แน่ใจว่าคุณมี repo postgresql ตามที่กล่าวถึงดิเอโก จากนั้นติดตั้งไคลเอ็นต์ที่อัปเกรดแล้ว

sudo apt-get update && sudo apt-get install postgresql-client-10

หากคุณเป็น Ubuntu 17.04 หรือ 17.10 ทราบว่าของ PostgreSQL repo zesty ไม่ได้มีลูกค้าที่มีการปรับปรุงเป็นที่คุณต้องการ คุณจะต้องการใช้ repen Xenial Postgres แทน


ฉันขอแนะนำให้อัปเกรด db เนื่องจากเป็นแพตช์รักษาความปลอดภัยที่ค่อนข้างสำคัญหากฐานข้อมูลของคุณเรียกใช้แบบสอบถามจากผู้ใช้ที่ไม่น่าเชื่อถือ: wiki.postgresql.org/wiki/ ...... "วัตถุประสงค์ของการเผยแพร่คือการระบุ CVE-2018-1058 ซึ่งอธิบาย วิธีที่ผู้ใช้สามารถสร้างออบเจ็กต์ที่มีชื่อคล้ายกันในสกีมาที่แตกต่างกันซึ่งสามารถเปลี่ยนพฤติกรรมของข้อความค้นหาของผู้ใช้รายอื่นและทำให้เกิดพฤติกรรมที่ไม่คาดคิดหรือเป็นอันตรายหรือที่เรียกว่า
RobM

ฉันได้รับUnable to locate package postgresql-client-10เมื่อฉันทำเช่นนี้
Doug

@RobM เห็นด้วย โดย "ไม่แนะนำให้อัปเกรด ... " ฉันหมายถึงไม่อัปเกรดเป็นเวอร์ชันหลักที่คุณไม่ได้ใช้ในการผลิต แน่นอนว่าฉลาดในการอัพเกรดแพทช์รักษาความปลอดภัยล่าสุดภายในเวอร์ชันหลักภายในและในการผลิตแน่นอน ฉันจะปรับการใช้คำฟุ่มเฟือยในคำตอบของฉันเพื่อสะท้อนความหมายของฉันดีขึ้น
Ivan

1
@Doug อย่าลืมเพิ่ม repo postgres ที่เหมาะสมก่อน คล้ายกับสิ่งที่อธิบายไว้ในความคิดเห็นนี้ stackoverflow.com/a/49116272/3975541
Ivan

4

นี่คือวิธีที่ฉันแก้ไขปัญหาบน Ubuntu (16.04 LTS) ที่ pg_restore / pg_dump ให้ฉันรุ่นที่เก่ากว่าจาก psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

ปัญหาคือฉันมีการติดตั้ง pg หลายรุ่นและ pg_restore ก็ชี้ไปที่รุ่นก่อนหน้า

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.5 main    5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

การแก้ไขคือการสร้างไฟล์ ~ / .postgresqlrc ที่ชี้ไปยังรุ่นที่ถูกต้อง

$ cat ~/.postgresqlrc

9.5 main *

เมื่อดำเนินการเสร็จแล้ว pg_restore จะชี้ไปยังเวอร์ชันที่ถูกต้องและคำสั่งดำเนินการผ่าน

รายละเอียดที่ให้ไว้ที่นี่: /server/610777/wrong-version-of-pg-dump-on-ubuntu


3

ฉันพบปัญหานี้ใน pgadmin III และสามารถแก้ไขได้ด้วยการสลับตำแหน่งไบนารี:

เมนูไฟล์> ตัวเลือก> เส้นทางไบนารีจากนั้นเปลี่ยน "เส้นทาง PG bin" เป็น postgresql / 9.x / bin แทน ProgramFiles / pgadmin คืนค่าทำงานได้ดีในภายหลัง


2

คุณกำลังใช้ไบนารี pg_restore เวอร์ชันเก่าที่ไม่สนับสนุนการกู้คืนไฟล์ดัมพ์ที่ให้มา โปรดตรวจสอบให้แน่ใจว่าคุณใช้รุ่น Postgres ล่าสุดซึ่งต้องสูงกว่ารุ่นต่อไปนี้: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 และ 9.3.22)

คุณสามารถตรวจสอบรุ่น pg_restore ที่คุณใช้โดยเรียกใช้ pg_restore --version

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


0

ฉันพบข้อผิดพลาดเดียวกัน ฉันอัปเดตเป็น postgresql 10.3 ในเครื่องและแก้ไขปัญหาให้ฉัน


-1

สำหรับ Windows:

เปิด Command Prompt ( cmd) จากนั้นไปที่ตำแหน่งC:\Program Files\PostgreSQL\9.6\binและเรียกใช้คำสั่งเหล่านี้:

pg_restore -U username -d dbname -1 filename.dump
pg_restore -U postgres -d app -1 G:\app09-07-2019.backup

หวังว่ามันจะช่วยคุณ


-3

ฉันพบปัญหาเดียวกันเมื่อ 10 นาทีที่แล้วและพบกับหัวข้อนี้จากปี 2005: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

โดยทั่วไปผู้ชายกำลังบอกว่าไฟล์ดัมพ์เสียหาย


3
แปลก. ฉันสร้างไฟล์ดัมพ์จาก heroku และได้รับปัญหาเดียวกัน สิ่งนี้ไม่เคยเกิดขึ้นมาก่อน ฉันพยายามอัพเกรด postgresql จาก 9.6 เป็น 10 แต่มันไม่ทำงาน
karantan

1
คุณอยู่ที่ 10.2 หรือ 10.3 ตอนนี้ฉันต้องเชื่อใน 10.3
Jack Kinsella

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