Bắt phiên bản [archiver] không được hỗ trợ (1.13) trong tiêu đề tệp Tập tin khi chạy pg_restore


165

Tôi vừa nâng cấp lên postgres 10.2 trên mac os phù hợp với 10.2 trên heroku. Tôi đang cố tải xuống một bản sao của cơ sở dữ liệu và khôi phục nó cục bộ. Trước khi nâng cấp, khôi phục sẽ hoạt động tốt.

tôi chạy

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

nhưng tôi nhận được lỗi này:

pg_restore: [archiver] phiên bản không được hỗ trợ (1.13) trong tiêu đề tệp

Cơ sở dữ liệu dường như hoạt động tốt. Đó là một ứng dụng đường ray và tôi đã nâng cấp đá quý pg. Tôi có thể chạy rake db:createdb:migratetốt.

Câu trả lời:


196

Bạn cần nâng cấp các bưu điện địa phương của mình để có được bản vá bảo mật cuối cùng từ 2018-03-01, giống như Herokucuộc diễu hành đầu tiên. Bạn cần một trong các phiên bản trước 10.3, 9.6.8, 9.5.12, 9.4.17, và 9.3.22.

Bản vá bảo mật có thể được tìm thấy ở đây https://www.postgresql.org/about/news/1834/ .

Có vẻ như bản vá đã được sửa đổi pg_dump, đó có lẽ là lý do tại sao chúng ta không thể sử dụng pg_restore nữa mà không có bản vá đó cho bãi chứa Heroku (với bản vá được áp dụng).


87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3

2
Sử dụng Linux Mint phiên bản của tôi là 9.5.11 và thông báo đã cập nhật. Làm cách nào để buộc nó sử dụng phiên bản mới nhất bằng apt-get?
Kritz

Postgresql 9.5.12 hiện có trong các gói
HarlemSquirrel

6
Nhận xét của @ gerry3 là hai lệnh riêng biệt. Hãy coi chừng các bản sao và dán!
Joe Masilotti

4
thực hiện hai lệnh brew upgrade postgresql && brew postgresql-upgrade-databasethực sự khắc phục vấn đề nhưng cơ sở dữ liệu cục bộ của tôi đã bị rớt dọc đường. Sao lưu chúng nếu bạn có dữ liệu quan trọng!
Jarvis Johnson

19

Hôm nay tôi gặp phải vấn đề tương tự, tôi không biết có gì thay đổi ở phía Heroku không, bởi vì tại địa phương tôi đang chạy 9.6 nhưng cơ sở dữ liệu của tôi trên Heroku là 9,4, vì vậy dường như không có sự khác biệt về điểm phiên bản (nó đã làm việc cho đến ngày hôm nay.)

Nếu bạn đang sử dụng Postgres.app ( https://postgresapp.com/ ) trên máy Mac, hãy đảm bảo bạn đang chạy v2.1.3(vì bài viết này là phiên bản mới nhất). Khi bạn nâng cấp Postgres.app, bạn sẽ nhận được bản phát hành bản vá mới nhất của Postgres, (điều này có thể gây ra sự không phù hợp mà bạn hiện đang gặp phải - Heroku đã nâng cấp cho bản vá bảo mật mới nhất và máy cục bộ của bạn có thể không có nó).

Tôi đã phải nâng cấp Postgres.app từ 2.1.0 lên 2.1.3 và nó đã giải quyết được vấn đề.


12

Kể từ hôm qua (03/01/2018), chúng tôi cũng đã gặp sự cố khi khôi phục bản sao lưu từ Heroku chạy trên PostgreQuery 9.5:

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

Nâng cấp phiên bản PostgreSQL của chúng tôi từ 9.5.11 lên 9.5.12 đã khắc phục sự cố.


12

Lần đầu tiên tôi gặp vấn đề này, đây là cách tôi khôi phục Cơ sở dữ liệu Heroku về Địa phương của mình:

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

Cách giải quyết tốt đẹp, tôi không biết về heroku pg:pull. Nhưng đây không phải là một sửa chữa phù hợp, vì bạn vẫn không thể khôi phục cục bộ một bãi rác heroku trước đó, tôi cũng đoán điều này sử dụng tài nguyên cơ sở dữ liệu trực tiếp trong khi kéo.
mất trí nhớ

1
Không chắc chắn những gì downvote là dành cho. OP thực sự đang hỏi "Tôi đang cố tải xuống một bản sao của cơ sở dữ liệu và khôi phục nó cục bộ" và tôi đang trả lời câu hỏi cụ thể đó.
Jim Padilla

7

Đối với những người đang cố gắng nâng cấp postgresql trong Ubuntu nhưng không thành công (như nhận xét của Johan ở trên), hãy thử sử dụng kho lưu trữ apt PostgreQuery, như đã nêu trong hướng dẫn tải xuống chính thức của PostgreQuery: https://www.postgresql.org/doad/linux/ub /

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

Việc khắc phục cho tôi liên quan đến cả việc cập nhật Postgres.app và cập nhật PostgreSQL tại nhà của tôi.

Cập nhật Postgres.app của tôi qua câu trả lời của Canuk:

Mở Postgres.app> Kiểm tra cập nhật ...

Cập nhật bài đăng homebrew địa phương của tôi qua nhận xét của gerry3 về câu trả lời được chấp nhận:

brew upgrade postgresql brew postgresql-upgrade-database


Tôi đã không phải cập nhật PostgreSQL homebrew của tôi. Chỉ cập nhật Postgres.app lên phiên bản mới nhất là đủ.
khai thác khoáng sản

cập nhật từ postgres.app đã khắc phục sự cố của tôi
FutoRicky

6

Có vấn đề này trên Windows khi sử dụng pgAdmin 3.

Nâng cấp từ pgAdmin 3 lên pgAdmin 4 đã giải quyết vấn đề cho tôi.

Nếu bạn đang sử dụng một công cụ của bên thứ ba, chẳng hạn như PGAdmin, để khôi phục tệp kết xuất được cung cấp, việc khôi phục có thể không thành công ngay cả với phiên bản Postgres đã cài đặt được cập nhật. Điều này là do các công cụ của bên thứ ba thường gói các phiên bản nhị phân pg_restore của riêng họ, có thể không cập nhật. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore


Cảm ơn, điều này đã làm việc cho tôi. Tôi đang sử dụng PostgreSQL 9.5.12 và tôi đang sử dụng pgAdmin 3. pgAdmin 4 đã có thể thực hiện pg_restorethành công.
Alexander

5

Tôi không khuyên bạn nên nâng cấp DB của mình lên phiên bản chính mới tại địa phương (áp dụng các bản vá bảo mật) chỉ để sửa lỗi này khi bạn muốn nó phù hợp với bất kỳ phiên bản nào bạn có trong sản xuất.

Điều này đã sửa nó trên Ubuntu 16.04, khôi phục từ cơ sở dữ liệu Heroku.

Đầu tiên, đảm bảo bạn có repo postgresql như diego đã đề cập. Sau đó cài đặt máy khách được nâng cấp.

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

Nếu bạn là Ubuntu 17.04 hoặc 17.10, hãy lưu ý rằng repo zesty của PostgreSQL không có ứng dụng khách cập nhật mà bạn cần. Bạn sẽ muốn sử dụng repo Postgres xenial thay thế.


Tôi khuyên bạn nên nâng cấp db, vì đó là một bản vá bảo mật khá quan trọng nếu cơ sở dữ liệu của bạn chạy các truy vấn từ người dùng không tin cậy: wiki.postgresql.org/wiki/ nam "Mục đích của bản phát hành là để giải quyết CVE-2018-1058, mô tả làm thế nào một người dùng có thể tạo các đối tượng giống như trong các lược đồ khác nhau có thể thay đổi hành vi của các truy vấn của người dùng khác và gây ra hành vi bất ngờ hoặc độc hại, còn được gọi là một cuộc tấn công "trojan-ngựa". "
RobM

Tôi nhận được Unable to locate package postgresql-client-10khi tôi làm điều này
Doug

@RobM Đồng ý. Bởi "không khuyến nghị nâng cấp ..." Tôi đã đề cập đến việc không nâng cấp lên phiên bản chính mà bạn không sử dụng trong sản xuất. Chắc chắn khôn ngoan để nâng cấp lên bản vá bảo mật mới nhất trong một phiên bản chính tại địa phương, và tất nhiên là đang sản xuất. Tôi sẽ điều chỉnh verbiage trong câu trả lời của tôi để phản ánh tốt hơn ý nghĩa của tôi.
Ivan

1
@Doug Đừng quên trước tiên thêm repo postgres thích hợp. Tương tự như những gì được mô tả trong bình luận này. stackoverflow.com/a/49116272/3975541
Ivan

4

Đây là cách tôi giải quyết vấn đề trên Ubuntu (16.04 LTS) trong đó pg_restore / pg_dump đã cho tôi một phiên bản cũ hơn, từ psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

Vấn đề là tôi đã cài đặt nhiều phiên bản pg và pg_restore đã trỏ đến phiên bản trước đó

$ 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

Cách khắc phục là tạo tệp ~ / .postgresqlrc trỏ đến phiên bản chính xác

$ cat ~/.postgresqlrc

9.5 main *

Khi điều này được thực hiện, pg_restore trỏ đến phiên bản chính xác và lệnh sẽ đi qua

Chi tiết được cung cấp tại đây: /server/610777/wrong-version-of-pg-dump-on-ub Ubuntu


3

Tôi đã gặp sự cố này trên pgadmin III và đã có thể khắc phục bằng cách chuyển đổi vị trí nhị phân:

Menu tệp> Tùy chọn> Đường dẫn nhị phân, sau đó thay đổi "đường dẫn PG bin" thành postgresql / 9.x / bin thay vì ProgramFiles / pgadmin. Khôi phục hoạt động tốt sau đó.


2

Bạn đang sử dụng phiên bản cũ của nhị phân pg_restore không hỗ trợ khôi phục tệp kết xuất được cung cấp. Vui lòng đảm bảo rằng bạn sử dụng phiên bản Postgres mới nhất, phải cao hơn phiên bản sau: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 và 9.3.22).

Bạn có thể kiểm tra phiên bản pg_restore bạn đang sử dụng bằng cách chạy pg_restore --version.

Nếu bạn đang sử dụng một công cụ của bên thứ ba, chẳng hạn như PGAdmin, để khôi phục tệp kết xuất được cung cấp, việc khôi phục có thể không thành công ngay cả với phiên bản Postgres đã cài đặt được cập nhật. Điều này là do các công cụ của bên thứ ba thường gói các phiên bản nhị phân pg_restore của riêng họ, có thể không cập nhật.


0

Tôi đã gặp phải lỗi tương tự. Tôi đã cập nhật lên postgresql 10.3 cục bộ và điều đó đã khắc phục sự cố cho tôi.


-1

Cho cửa sổ:

Mở Command Prompt ( cmd), sau đó đi đến vị trí C:\Program Files\PostgreSQL\9.6\binvà chạy các lệnh sau:

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

Hy vọng nó sẽ giúp bạn


-3

Tôi đã chạy trong cùng một vấn đề 10 phút trước và phát hiện ra chủ đề này từ năm 2005: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

Về cơ bản anh chàng đang nói tập tin kết xuất bị hỏng.


3
Lạ thật. Tôi đã tạo một tệp kết xuất từ ​​heroku và tôi gặp vấn đề tương tự. Điều này chưa bao giờ xảy ra trước đây. Tôi đã thử nâng cấp postgresql từ 9.6 lên 10 nhưng không được.
karantan

1
Bạn đang trên 10.2 hay 10.3? Bạn phải có mặt trên 10.3 bây giờ tôi tin.
Jack Kinsella

Chủ đề danh sách gửi thư đó là từ năm 2005. Có một cái gì đó gần đây đã thay đổi đang diễn ra ở đây khác với vấn đề trong chủ đề đó.
Yetanotherjosh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.