Obtenir «[archiver] version non prise en charge (1.13) dans l'en-tête du fichier» lors de l'exécution de pg_restore

165

Je viens de passer à postgres 10.2 sur mac os qui correspond à 10.2 sur heroku. J'essaye de télécharger une copie de la base de données et de la restaurer localement. Avant la mise à niveau, la restauration fonctionnait correctement.

je cours

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

mais j'obtiens cette erreur:

pg_restore: [archiveur] version non prise en charge (1.13) dans l'en-tête du fichier

La base de données semble fonctionner correctement. C'est une application de rails et j'ai mis à niveau les gemmes pg. Je peux courir rake db:createet db:migratetrès bien.

Mark Swardstrom
la source

Réponses:

196

Vous devez mettre à jour vos postgres locaux pour obtenir le dernier correctif de sécurité du 01/03/2018, comme l'a Herokufait le 1er mars. Vous avez besoin d' une des dernières versions 10.3, 9.6.8, 9.5.12, 9.4.17et 9.3.22.

Le correctif de sécurité peut être trouvé ici https://www.postgresql.org/about/news/1834/ .

Il semble que le patch ait modifié pg_dump, c'est probablement pourquoi nous ne pouvons plus utiliser pg_restore sans ce patch pour le vidage de Heroku (avec le patch appliqué).

Jumichot
la source
87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3
2
En utilisant Linux Mint, ma version est 9.5.11 et elle dit qu'elle est à jour. Comment le forcer à utiliser la dernière version en utilisant apt-get?
Kritz
Postgresql 9.5.12 est maintenant dans le repo officiel Ubuntu 16.04 xenial packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel
6
Le commentaire de @ gerry3 est composé de deux commandes distinctes. Méfiez-vous des copieurs et pasteurs!
Joe Masilotti
4
Attention, les deux commandes brew upgrade postgresql && brew postgresql-upgrade-databaserésolvent effectivement le problème, mais mes bases de données locales ont été abandonnées en cours de route. Sauvegardez-les si vous avez des données critiques!
Jarvis Johnson
19

J'ai rencontré ce même problème aujourd'hui, je ne sais pas si quelque chose a changé du côté d'Heroku, car localement j'exécute 9.6 mais ma base de données sur Heroku est 9.4, donc cela ne semblait pas être à propos de la différence de point de version (il travaillait jusqu'à aujourd'hui.)

Si vous utilisez Postgres.app ( https://postgresapp.com/ ) sur un Mac, assurez-vous que vous utilisez v2.1.3(au moment de la rédaction de cet article, il s'agit de la version la plus récente). Lorsque vous mettez à niveau Postgres.app, vous obtenez la dernière version du correctif de Postgres, (ce qui est probablement à l'origine de l'incohérence que vous rencontrez actuellement - Heroku a mis à niveau pour le dernier correctif de sécurité, et votre machine locale ne l'a peut-être pas).

J'ai dû mettre à niveau Postgres.app de 2.1.0 à 2.1.3 et cela a résolu le problème.

Canuk
la source
12

Depuis hier (03/01/2018), nous avons également eu des problèmes pour restaurer une sauvegarde depuis Heroku fonctionnant sous PostgreSQL 9.5:

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

La mise à niveau de notre version PostgreSQL de 9.5.11 à 9.5.12 a résolu le problème.

cbx
la source
12

La première fois que j'ai eu ce problème, voici comment j'ai restauré la base de données Heroku dans ma section locale:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
Jim Padilla
la source
Belle solution de contournement, je ne savais pas heroku pg:pull. Mais ce n'est pas une solution appropriée, car vous ne pouvez toujours pas restaurer localement un dump heroku précédent, je suppose également que cela utilise la ressource de base de données en direct lors de l'extraction.
démence
1
Je ne sais pas à quoi servent les votes négatifs. OP demande littéralement «J'essaye de télécharger une copie de la base de données et de la restaurer localement» et je réponds à cette question spécifique.
Jim Padilla
7

Pour ceux qui essaient de mettre à niveau postgresql dans Ubuntu sans succès (comme Johan's commenté ci-dessus), essayez d'utiliser le référentiel apt PostgreSQL, comme indiqué dans les instructions de téléchargement officielles de 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
Diego Aragão
la source
6

Le correctif pour moi impliquait à la fois la mise à jour de mon Postgres.app et la mise à jour de mon homebrew local PostgreSQL.

Mettez à jour mon Postgres.app via la réponse de Canuk:

Ouvrez Postgres.app> Rechercher les mises à jour ...

Mettez à jour mon homebrew local PostgreSQL via le commentaire de gerry3 sur la réponse acceptée:

brew upgrade postgresql brew postgresql-upgrade-database

alxpck
la source
Je n'ai pas eu à mettre à jour mon homebrew PostgreSQL. Seule la mise à jour de Postgres.app vers la dernière version était suffisante.
mineralwasser
la mise à jour de postgres.app a corrigé mon problème
FutoRicky
6

Eu ce problème sur Windows en utilisant pgAdmin 3.

La mise à niveau de pgAdmin 3 vers pgAdmin 4 a résolu le problème pour moi.

Si vous utilisez un outil tiers, tel que PgAdmin, pour restaurer le fichier de vidage fourni, la restauration peut échouer même avec la version installée de Postgres étant à jour. Cela est dû au fait que des outils tiers regroupent souvent leurs propres versions du binaire pg_restore, qui peuvent ne pas être à jour. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

Andrew
la source
Merci, cela a fonctionné pour moi. Je suis sur PostgreSQL 9.5.12 et j'utilisais pgAdmin 3. pgAdmin 4 a pu fonctionner pg_restoreavec succès.
Alexander
5

Je ne recommande pas de mettre à niveau votre base de données vers une nouvelle version majeure localement (appliquez des correctifs de sécurité) juste pour résoudre ce problème, car vous voulez que cela corresponde à la version que vous avez en production.

Cela a résolu le problème sur Ubuntu 16.04, en restaurant à partir d'une base de données Heroku.

Tout d'abord, assurez-vous d'avoir le repo postgresql comme diego l'a mentionné. Ensuite, installez le client mis à niveau.

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

Si vous êtes Ubuntu 17.04 ou 17.10, notez que le dépôt zesty de PostgreSQL n'a pas les clients mis à jour dont vous avez besoin. Vous voudrez plutôt utiliser le repo xenial Postgres.

Ivan
la source
Je recommande de mettre à jour la base de données, car c'est un correctif de sécurité qui est assez important si votre base de données exécute des requêtes d'utilisateurs non approuvés: wiki.postgresql.org/wiki / ... "Le but de la publication était de traiter la CVE-2018-1058, qui décrit comment un utilisateur peut créer des objets portant le même nom dans différents schémas qui peuvent modifier le comportement des requêtes des autres utilisateurs et provoquer un comportement inattendu ou malveillant, également connu sous le nom d'attaque "cheval de Troie". "
RobM
Je reçois Unable to locate package postgresql-client-10quand je fais ça
Doug
@RobM d'accord. Par "ne pas recommander la mise à niveau ...", je parlais de ne pas mettre à niveau vers une version majeure que vous n'utilisez pas en production. Certainement sage de mettre à niveau vers le dernier correctif de sécurité dans une version majeure localement, et en production bien sûr. Je peaufinerai le verbiage de ma réponse pour mieux refléter ma signification.
Ivan
1
@Doug N'oubliez pas d'ajouter d'abord le repo postgres approprié. Similaire à ce qui est décrit dans ce commentaire. stackoverflow.com/a/49116272/3975541
Ivan
4

Voici comment j'ai résolu le problème sur Ubuntu (16.04 LTS) où pg_restore / pg_dump m'a donné une version plus ancienne, de psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

Le problème est que j'ai plusieurs versions de pg installées et pg_restore pointait vers la version antérieure

$ 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

Le correctif consiste à créer un fichier ~ / .postgresqlrc pointant vers la version correcte

$ cat ~/.postgresqlrc

9.5 main *

Une fois cela fait, pg_restore pointe vers la version correcte, et la commande passe par

Détails donnés ici: /server/610777/wrong-version-of-pg-dump-on-ubuntu

Rabi Cherian
la source
3

J'ai rencontré ce problème sur pgadmin III et j'ai pu le résoudre en changeant l'emplacement des binaires:

Menu Fichier> Options> Chemins binaires, puis a changé "PG bin path" en postgresql / 9.x / bin au lieu de ProgramFiles / pgadmin. La restauration a bien fonctionné par la suite.

op op oppose
la source
2

Vous utilisez une ancienne version du binaire pg_restore qui ne prend pas en charge la restauration du fichier de vidage fourni. Veuillez vous assurer que vous utilisez la dernière version de Postgres, qui doit être supérieure à la version suivante: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 , et 9.3.22).

Vous pouvez vérifier la version de pg_restore que vous utilisez en exécutant pg_restore --version.

Si vous utilisez un outil tiers, tel que PgAdmin, pour restaurer le fichier de vidage fourni, la restauration peut échouer même avec la version Postgres installée étant à jour. Cela est dû au fait que des outils tiers regroupent souvent leurs propres versions du binaire pg_restore, qui peuvent ne pas être à jour.

Vagner Dev
la source
0

Je rencontrais la même erreur. J'ai mis à jour vers postgresql 10.3 localement, et cela a résolu le problème pour moi.

Sean McCleary
la source
-1

Pour les fenêtres:

Ouvrez l'invite de commande ( cmd), puis accédez à l'emplacement C:\Program Files\PostgreSQL\9.6\binet exécutez ces commandes:

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

J'espère que cela vous aidera

Reena Khan
la source
-3

J'ai couru dans le même numéro il y a 10 minutes et j'ai découvert ce fil à partir de 2005: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

Fondamentalement, le gars dit que le fichier de vidage est corrompu.

nfilzi
la source
3
Étrange. J'ai créé un fichier de vidage à partir d'heroku et j'ai eu le même problème. Cela ne s'est jamais produit auparavant. J'ai essayé de mettre à niveau postgresql de 9.6 à 10 mais cela n'a pas fonctionné.
karantan
1
Êtes-vous sur 10.2 ou 10.3? Vous devez être sur 10.3 maintenant, je crois.
Jack Kinsella
Ce fil de discussion de la liste de diffusion date de 2005. Il y a quelque chose de récemment changé ici qui est différent du problème dans ce fil.
Yetanotherjosh