Mendapatkan "[archiver] versi yang tidak didukung (1,13) di header file" saat menjalankan pg_restore

165

Saya baru saja memutakhirkan ke postgres 10.2 di mac os yang cocok dengan 10.2 di heroku. Saya mencoba mengunduh salinan database dan memulihkannya secara lokal. Sebelum peningkatan, pemulihan akan berfungsi dengan baik.

saya berlari

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

tapi saya mendapatkan kesalahan ini:

pg_restore: [archiver] versi yang tidak didukung (1,13) di header file

Basis data tampaknya berfungsi baik. Ini adalah aplikasi rel dan saya meningkatkan permata pg. Saya bisa berlari rake db:createdan db:migratebaik-baik saja.

Tandai Swardstrom
sumber

Jawaban:

196

Anda perlu memutakhirkan postgres lokal Anda untuk mendapatkan patch keamanan terakhir dari 2018-03-01, seperti yang Herokudilakukan 1 Maret. Anda perlu salah satu rilis terakhir 10.3, 9.6.8, 9.5.12, 9.4.17, dan 9.3.22.

Patch keamanan dapat ditemukan di sini https://www.postgresql.org/about/news/1834/ .

Tampaknya patch modifikasi pg_dump, itu mungkin mengapa kita tidak bisa menggunakan pg_restore lagi tanpa patch itu untuk dump Heroku (dengan patch yang diterapkan).

Jumichot
sumber
87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3
2
Menggunakan Linux Mint versi saya adalah 9.5.11 dan dikatakan sudah terbaru. Bagaimana saya memaksanya untuk menggunakan versi terbaru menggunakan apt-get?
Kritz
Postgresql 9.5.12 sekarang ada di Ubuntu 16.04 xenial repo packages
resmi.ubuntu.com/xenial/postgresql-9.5
6
Komentar @ gerry3 adalah dua perintah terpisah. Waspadalah copy-and-pasters!
Joe Masilotti
4
mengepalai kedua perintah brew upgrade postgresql && brew postgresql-upgrade-databasememang memperbaiki masalah tetapi database lokal saya dijatuhkan di sepanjang jalan. Cadangkan jika Anda memiliki data penting!
Jarvis Johnson
19

Saya mengalami masalah yang sama hari ini, saya tidak tahu apakah ada sesuatu yang berubah di pihak Heroku, karena secara lokal saya menjalankan 9.6 tetapi basis data saya di Heroku adalah 9.4, jadi sepertinya bukan tentang perbedaan titik versi (itu sedang bekerja sampai hari ini.)

Jika Anda menggunakan Postgres.app ( https://postgresapp.com/ ) di Mac, pastikan Anda menjalankan v2.1.3(pada tulisan ini, ini adalah versi terbaru). Ketika Anda memutakhirkan Postgres.app Anda mendapatkan rilis patch terbaru dari Postgres, (yang kemungkinan menyebabkan ketidakcocokan yang Anda alami saat ini - Heroku telah memutakhirkan untuk tambalan keamanan terbaru, dan mesin lokal Anda mungkin tidak memilikinya).

Saya harus memutakhirkan Postgres.app dari 2.1.0 ke 2.1.3 dan itu memecahkan masalah.

Canuk
sumber
12

Sejak kemarin (03/01/2018) kami juga mengalami masalah memulihkan cadangan dari Heroku yang berjalan di PostgreSQL 9.5:

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

Memutakhirkan versi PostgreSQL kami dari 9.5.11 ke 9.5.12 memperbaiki masalah ini.

cbx
sumber
12

Pertama kali saya mengalami masalah ini, inilah cara saya memulihkan Database Heroku ke Lokal saya:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
Jim Padilla
sumber
Penanganan yang bagus, saya tidak tahu heroku pg:pull. Tapi ini bukan perbaikan yang cocok, karena Anda masih tidak dapat mengembalikan dump heroku sebelumnya secara lokal, juga saya kira ini menggunakan sumber daya database hidup sambil menarik.
demental
1
Tidak yakin untuk apa downvotes itu. OP secara harfiah bertanya "Saya mencoba mengunduh salinan database dan mengembalikannya secara lokal" dan saya menjawab pertanyaan spesifik itu.
Jim Padilla
7

Bagi mereka yang mencoba memutakhirkan postgresql di Ubuntu tanpa hasil (seperti komentar Johan di atas), coba gunakan repositori apt PostgreSQL, sebagaimana dinyatakan dalam petunjuk unduh PostgreSQL resmi: 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
Diego Aragão
sumber
6

Perbaikan untuk saya terlibat baik memperbarui Postgres.app saya dan memperbarui homebrew lokal saya PostgreSQL.

Perbarui Postgres.app saya melalui jawaban Canuk:

Buka Postgres.app> Periksa pembaruan ...

Perbarui PostgreSQL homebrew lokal saya melalui komentar gerry3 pada jawaban yang diterima:

brew upgrade postgresql brew postgresql-upgrade-database

alxpck
sumber
Saya tidak perlu memperbarui PostgreSQL buatan sendiri. Hanya memperbarui Postgres.app ke versi terbaru sudah cukup.
mineralwasser
memperbarui dari postgres.app memperbaiki masalah saya
FutoRicky
6

Punya masalah ini pada Windows menggunakan pgAdmin 3.

Memutakhirkan dari pgAdmin 3 ke pgAdmin 4 memecahkan masalah bagi saya.

Jika Anda menggunakan alat pihak ketiga, seperti PgAdmin, untuk mengembalikan file dump yang disediakan, pemulihan mungkin tidak berhasil walaupun versi Postgres yang terinstal tetap terkini. Ini karena alat pihak ketiga sering menggabungkan versi biner pg_restore mereka sendiri, yang mungkin tidak mutakhir. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

Andrew
sumber
Terima kasih, ini berhasil untuk saya. Saya menggunakan PostgreSQL 9.5.12, dan saya menggunakan pgAdmin 3. pgAdmin 4 dapat bekerja dengan pg_restoresukses.
Alexander
5

Saya tidak menyarankan untuk memperbarui DB Anda ke versi utama baru secara lokal (lakukan penerapan patch keamanan) hanya untuk memperbaikinya karena Anda ingin agar sesuai dengan versi apa pun yang Anda miliki dalam produksi.

Ini memperbaikinya pada Ubuntu 16.04, memulihkan dari database Heroku.

Pertama, pastikan Anda memiliki repo postgresql seperti yang disebutkan diego. Kemudian instal klien yang ditingkatkan.

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

Jika Anda adalah Ubuntu 17.04 atau 17.10, perhatikan bahwa repo zesty PostgreSQL tidak memiliki klien yang diperbarui yang Anda butuhkan. Anda akan ingin menggunakan repo xenial Postgres sebagai gantinya.

Ivan
sumber
Saya merekomendasikan untuk memutakhirkan db, karena ini merupakan tambalan keamanan yang cukup penting jika database Anda menjalankan kueri dari pengguna yang tidak terpercaya: wiki.postgresql.org/wiki/... "Tujuan dari rilis ini adalah untuk alamat CVE-2018-1058, yang menjelaskan bagaimana pengguna dapat membuat objek dengan nama seperti di skema berbeda yang dapat mengubah perilaku kueri pengguna lain dan menyebabkan perilaku tak terduga atau berbahaya, juga dikenal sebagai serangan "trojan-horse".
RobM
Saya dapatkan Unable to locate package postgresql-client-10ketika saya melakukan ini
Doug
@RobM Setuju. Dengan "jangan rekomendasikan peningkatan ..." Saya merujuk untuk tidak memutakhirkan ke versi utama yang tidak Anda gunakan dalam produksi. Tentu bijaksana untuk meningkatkan ke patch keamanan terbaru dalam versi utama secara lokal, dan tentu saja produksi. Saya akan mengubah kata-kata dalam jawaban saya untuk lebih mencerminkan makna saya.
Ivan
1
@Doug Jangan lupa untuk menambahkan repo postgres yang sesuai terlebih dahulu. Mirip dengan apa yang dijelaskan dalam komentar ini. stackoverflow.com/a/49116272/3975541
Ivan
4

Inilah cara saya mengatasi masalah di Ubuntu (16.04 LTS) di mana pg_restore / pg_dump memberi saya versi yang lebih lama, dari psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

Masalahnya adalah saya menginstal beberapa versi pg, dan pg_restore menunjuk ke versi sebelumnya

$ 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

Cara mengatasinya adalah membuat file ~ / .postgresqlrc yang menunjuk ke versi yang benar

$ cat ~/.postgresqlrc

9.5 main *

Setelah ini selesai, pg_restore menunjuk ke versi yang benar, dan perintah berjalan

Detail yang diberikan di sini: /server/610777/wrong-version-of-pg-dump-on-ubuntu

Rabi Cherian
sumber
3

Saya mengalami masalah ini pada pgadmin III dan dapat memperbaikinya dengan mengganti lokasi binari:

Menu file> Opsi> Binary Paths, lalu ubah "PG bin path" ke postgresql / 9.x / bin alih-alih ProgramFiles / pgadmin. Restore bekerja dengan baik setelahnya.

op op opself
sumber
2

Anda menggunakan versi lama biner pg_restore yang tidak mendukung memulihkan file dump yang disediakan. Pastikan Anda menggunakan versi Postgres terbaru, yang harus lebih tinggi daripada rilis berikut: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 , dan 9.3.22).

Anda dapat memeriksa versi pg_restore yang Anda gunakan dengan menjalankan pg_restore --version.

Jika Anda menggunakan alat pihak ketiga, seperti PgAdmin, untuk mengembalikan file dump yang disediakan, pemulihan mungkin tidak berhasil walaupun versi Postgres yang terinstal tetap terkini. Ini karena alat pihak ketiga sering menggabungkan versi biner pg_restore mereka sendiri, yang mungkin tidak mutakhir.

Vagner Dev
sumber
0

Saya mengalami kesalahan yang sama. Saya memperbarui ke postgresql 10.3 secara lokal, dan itu memperbaiki masalah bagi saya.

Sean McCleary
sumber
-1

Untuk Windows:

Buka Command Prompt ( cmd), lalu pergi ke lokasi C:\Program Files\PostgreSQL\9.6\bindan jalankan perintah ini:

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

Semoga ini bisa membantu Anda

Reena khan
sumber
-3

Saya berlari di masalah yang sama 10 menit yang lalu, dan menemukan tentang utas ini dari 2005: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

Pada dasarnya pria itu mengatakan file dump rusak.

nfilzi
sumber
3
Aneh. Saya membuat file dump dari heroku dan saya mendapat masalah yang sama. Ini tidak pernah terjadi sebelumnya. Saya mencoba memutakhirkan postgresql dari 9,6 menjadi 10 tetapi tidak berhasil.
karantan
1
Apakah Anda menggunakan 10.2 atau 10.3? Anda harus menggunakan 10.3 sekarang saya percaya.
Jack Kinsella
Utas milis itu berasal dari 2005. Ada sesuatu yang baru-baru ini terjadi di sini yang berbeda dari masalah di utas itu.
Yetanotherjosh