Beim Ausführen von pg_restore wird "[archiver] nicht unterstützte Version (1.13) im Dateikopf" angezeigt

165

Ich habe gerade ein Upgrade auf Postgres 10.2 auf Mac OS durchgeführt, das 10.2 auf Heroku entspricht. Ich versuche, eine Kopie der Datenbank herunterzuladen und lokal wiederherzustellen. Vor dem Upgrade würde die Wiederherstellung gut funktionieren.

ich renne

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

aber ich bekomme diesen Fehler:

pg_restore: [archiver] nicht unterstützte Version (1.13) im Dateikopf

Die Datenbank scheint in Ordnung zu sein. Es ist eine Rails-App und ich habe die pg-Edelsteine ​​aktualisiert. Ich kann rennen rake db:createund db:migrategut.

Mark Swardstrom
quelle

Antworten:

196

Sie müssen Ihre lokalen Postgres aktualisieren, um den letzten Sicherheitspatch vom 01.03.2018 zu erhalten, wie Herokuauch am 1. März. Sie müssen eine der letzten Versionen 10.3, 9.6.8, 9.5.12, 9.4.17, und 9.3.22.

Den Sicherheitspatch finden Sie hier https://www.postgresql.org/about/news/1834/ .

Es scheint, dass der Patch pg_dump geändert hat. Deshalb können wir pg_restore wahrscheinlich nicht mehr ohne diesen Patch für den Dump von Heroku verwenden (mit dem angewendeten Patch).

Jumichot
quelle
87
brew upgrade postgresql brew postgresql-upgrade-database
Gerry3
2
Unter Linux Mint ist meine Version 9.5.11 und es heißt, dass sie aktuell ist. Wie erzwinge ich die Verwendung der neuesten Version mit apt-get?
Kritz
Postgresql 9.5.12 ist jetzt in den offiziellen Ubuntu 16.04 xenial repo packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel
6
Der Kommentar von @ gerry3 besteht aus zwei separaten Befehlen. Vorsicht vor Copy-and-Pasters!
Joe Masilotti
4
Heads-up Die beiden Befehle brew upgrade postgresql && brew postgresql-upgrade-databasebeheben zwar das Problem, aber meine lokalen Datenbanken wurden auf dem Weg gelöscht. Sichern Sie sie, wenn Sie wichtige Daten haben!
Jarvis Johnson
19

Ich bin heute auf dasselbe Problem gestoßen. Ich weiß nicht, ob sich auf Herokus Seite etwas geändert hat, da ich lokal 9.6 verwende, aber meine Datenbank auf Heroku ist 9.4, also schien es nicht um den Versionspunktunterschied zu gehen arbeitete bis heute.)

Wenn Sie Postgres.app ( https://postgresapp.com/ ) auf einem Mac verwenden, stellen Sie sicher, dass Sie ausgeführt werden v2.1.3(zum jetzigen Zeitpunkt ist dies die neueste Version). Wenn Sie die Postgres.app aktualisieren, erhalten Sie die neueste Patch-Version von Postgres (was wahrscheinlich zu der derzeit auftretenden Nichtübereinstimmung führt - Heroku hat ein Upgrade für den neuesten Sicherheitspatch durchgeführt, und Ihr lokaler Computer verfügt möglicherweise nicht darüber).

Ich musste Postgres.app von 2.1.0 auf 2.1.3 aktualisieren und es löste das Problem.

Canuk
quelle
12

Seit gestern (03/01/2018) hatten wir auch Probleme beim Wiederherstellen eines Backups von Heroku unter PostgreSQL 9.5:

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

Das Upgrade unserer PostgreSQL-Version von 9.5.11 auf 9.5.12 hat das Problem behoben.

cbx
quelle
12

Wenn ich dieses Problem zum ersten Mal hatte, habe ich die Heroku-Datenbank wie folgt wiederhergestellt:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
Jim Padilla
quelle
Gute Lösung, von der ich nichts wusste heroku pg:pull. Dies ist jedoch keine geeignete Lösung, da Sie einen vorherigen Heroku-Speicherauszug immer noch nicht lokal wiederherstellen können. Außerdem wird beim Abrufen die Live-Datenbankressource verwendet.
Demental
1
Ich bin mir nicht sicher, wofür die Abstimmungen sind. OP fragt buchstäblich "Ich versuche, eine Kopie der Datenbank herunterzuladen und lokal wiederherzustellen" und beantworte diese spezielle Frage.
Jim Padilla
7

Wenn Sie versuchen, Postgresql in Ubuntu ohne Erfolg zu aktualisieren (wie oben von Johan kommentiert), verwenden Sie das PostgreSQL-Apt-Repository, wie in den offiziellen PostgreSQL-Download-Anweisungen angegeben: 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
quelle
6

Das Update für mich beinhaltete sowohl die Aktualisierung meiner Postgres.app als auch die Aktualisierung meiner lokalen Homebrew PostgreSQL.

Aktualisiere meine Postgres.app über Canuks Antwort:

Öffnen Sie Postgres.app> Nach Updates suchen ...

Aktualisiere mein lokales Homebrew PostgreSQL über den Kommentar von gerry3 zur akzeptierten Antwort:

brew upgrade postgresql brew postgresql-upgrade-database

alxpck
quelle
Ich musste mein Homebrew PostgreSQL nicht aktualisieren. Nur die Aktualisierung von Postgres.app auf die neueste Version war ausreichend.
Mineralwasser
Aktualisierung von postgres.app behoben mein Problem
FutoRicky
6

Hatte dieses Problem unter Windows mit pgAdmin 3.

Ein Upgrade von pgAdmin 3 auf pgAdmin 4 löste das Problem für mich.

Wenn Sie ein Tool eines Drittanbieters wie PgAdmin verwenden, um die bereitgestellte Speicherauszugsdatei wiederherzustellen, ist die Wiederherstellung möglicherweise nicht erfolgreich, selbst wenn die installierte Postgres-Version auf dem neuesten Stand ist. Dies liegt daran, dass Tools von Drittanbietern häufig ihre eigenen Versionen der Binärdatei pg_restore bündeln, die möglicherweise nicht auf dem neuesten Stand sind. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

Andrew
quelle
Danke, das hat bei mir funktioniert. Ich bin auf PostgreSQL 9.5.12 und habe pgAdmin 3 verwendet. PgAdmin 4 konnte pg_restoreerfolgreich ausgeführt werden.
Alexander
5

Ich empfehle nicht, Ihre Datenbank lokal auf eine neue Hauptversion zu aktualisieren (wenden Sie Sicherheitspatches an), nur um dies zu beheben, da Sie möchten, dass dies mit der Version übereinstimmt, die Sie in der Produktion haben.

Dies behebt es unter Ubuntu 16.04 und stellt es aus einer Heroku-Datenbank wieder her.

Stellen Sie zunächst sicher, dass Sie das Postgresql-Repo haben, wie von Diego erwähnt. Installieren Sie dann den aktualisierten Client.

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

Wenn Sie Ubuntu 17.04 oder 17.10 sind, beachten Sie, dass das pikante Repo von PostgreSQL nicht über die aktualisierten Clients verfügt, die Sie benötigen. Sie sollten stattdessen das xeniale Postgres-Repo verwenden.

Ivan
quelle
Ich empfehle ein Upgrade der Datenbank, da es sich um einen Sicherheitspatch handelt, der sehr wichtig ist, wenn in Ihrer Datenbank Abfragen von nicht vertrauenswürdigen Benutzern ausgeführt werden: wiki.postgresql.org/wiki/… "Der Zweck der Version bestand darin, CVE-2018-1058 zu behandeln, in dem beschrieben wird Wie ein Benutzer gleichnamige Objekte in verschiedenen Schemas erstellen kann, die das Verhalten der Abfragen anderer Benutzer ändern und unerwartetes oder böswilliges Verhalten verursachen können, das auch als "Trojaner" -Angriff bezeichnet wird. "
RobM
Ich bekomme, Unable to locate package postgresql-client-10wenn ich das mache
Doug
@RobM Einverstanden. Mit "Kein Upgrade empfehlen ..." bezog ich mich darauf, kein Upgrade auf eine Hauptversion durchzuführen, die Sie nicht in der Produktion verwenden. Es ist auf jeden Fall ratsam, lokal und natürlich bei der Produktion auf den neuesten Sicherheitspatch innerhalb einer Hauptversion zu aktualisieren. Ich werde das Wort in meiner Antwort optimieren, um meine Bedeutung besser widerzuspiegeln.
Ivan
1
@ Doug Vergessen Sie nicht, zuerst das entsprechende Postgres-Repo hinzuzufügen. Ähnlich wie in diesem Kommentar beschrieben. stackoverflow.com/a/49116272/3975541
Ivan
4

Hier ist, wie ich das Problem unter Ubuntu (16.04 LTS) gelöst habe, wo pg_restore / pg_dump mir eine ältere Version von psql gab

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

Das Problem ist, dass ich mehrere pg-Versionen installiert habe und pg_restore auf die frühere Version zeigte

$ 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

Das Update besteht darin, eine ~ / .postgresqlrc-Datei zu erstellen, die auf die richtige Version verweist

$ cat ~/.postgresqlrc

9.5 main *

Sobald dies erledigt ist, zeigt pg_restore auf die richtige Version und der Befehl wird ausgeführt

Details hier angegeben: /server/610777/wrong-version-of-pg-dump-on-ubuntu

Rabi Cherian
quelle
3

Ich bin auf dieses Problem bei pgadmin III gestoßen und konnte es durch Wechseln des Speicherorts der Binärdateien beheben:

Menü Datei> Optionen> Binäre Pfade, dann wurde "PG bin path" in postgresql / 9.x / bin anstelle von ProgramFiles / pgadmin geändert. Die Wiederherstellung funktionierte danach einwandfrei.

op op opself
quelle
2

Sie verwenden eine alte Version der Binärdatei pg_restore, die das Wiederherstellen der bereitgestellten Speicherauszugsdatei nicht unterstützt. Stellen Sie sicher, dass Sie die neueste Postgres-Version verwenden, die höher als die folgende Version sein muss: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 und 9.3.22).

Sie können die von Ihnen verwendete pg_restore-Version überprüfen, indem Sie pg_restore --version ausführen.

Wenn Sie ein Tool eines Drittanbieters wie PgAdmin verwenden, um die bereitgestellte Speicherauszugsdatei wiederherzustellen, ist die Wiederherstellung möglicherweise nicht erfolgreich, selbst wenn die installierte Postgres-Version auf dem neuesten Stand ist. Dies liegt daran, dass Tools von Drittanbietern häufig ihre eigenen Versionen der Binärdatei pg_restore bündeln, die möglicherweise nicht auf dem neuesten Stand sind.

Vagner Dev
quelle
0

Ich habe den gleichen Fehler festgestellt. Ich habe lokal auf postgresql 10.3 aktualisiert, und das hat das Problem für mich behoben.

Sean McCleary
quelle
-1

Für Windows:

Öffnen Sie die Eingabeaufforderung ( cmd), gehen Sie zum Speicherort C:\Program Files\PostgreSQL\9.6\binund führen Sie die folgenden Befehle aus:

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

Hoffe es wird dir helfen

Reena Khan
quelle
-3

Ich bin vor 10 Minuten in derselben Ausgabe gelaufen und habe 2005 von diesem Thread erfahren: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

Grundsätzlich sagt der Typ, dass die Dump-Datei beschädigt ist.

nfilzi
quelle
3
Seltsam. Ich habe eine Dump-Datei aus Heroku erstellt und das gleiche Problem festgestellt. Das ist noch nie passiert. Ich habe versucht, postgresql von 9.6 auf 10 zu aktualisieren, aber es hat nicht funktioniert.
Karantan
1
Bist du auf 10.2 oder 10.3? Du musst jetzt auf 10.3 sein, glaube ich.
Jack Kinsella
Dieser Mailinglisten-Thread stammt aus dem Jahr 2005. Hier hat sich kürzlich etwas geändert, das sich von dem Problem in diesem Thread unterscheidet.
Yetanotherjosh