web-dev-qa-db-fra.com

pg_restore: [archiveur] n'a pas trouvé de chaîne magique dans l'en-tête du fichier

J'utilise PostgreSQL 9.1 et je souhaite restaurer les fichiers de sauvegarde générés avec pg_dump:

Sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

Cette commande génère un fichier sql valide qui commence par supprimer tous les objets de base de données existants, puis génère toutes les tables, indise, séquence et ainsi de suite, et insère enfin les données.

Lorsque j'essaie de restaurer le fichier de sauvegarde généré avec: (sauts de ligne ajoutés à des fins d'affichage uniquement)

Sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql

il échoue et imprime:

pg_restore: [archiver] did not find magic string in file header

Quelle est la raison de ceci?

13
maja

Vous restaurez avec pg_restore --format=c ... mais le pg_dump n'a pas été fait avec --format=c, cela a été fait avec le format par défaut plain.

De pg_dump page de manuel:

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

Un vidage au format brut doit être directement envoyé à l'outil de ligne de commande psql, pg_restore ne sait pas de quoi il s'agit, ce qui explique ce message d'erreur: n'a pas trouvé de chaîne magique dans l'en-tête du fichier .

Vous pouvez regarder directement le fichier de vidage avec more out.sql dans Shell et vous verrez des commandes SQL lisibles. Restaurez-le avec psql -f out.sql [other options]. Vous souhaiterez probablement d'abord créer la base de données cible, car le --create l'option n'est pas présente dans le pg_dump invocation.

En revanche, vous pouvez réinvoquer le vidage en ajoutant --format=c à ses options. Ce serait alors le contraire: pg_restore doit être utilisé pour interpréter un fichier de vidage au format personnalisé.

19
Daniel Vérité

Un problème possible est que votre fichier de données est tronqué. Vérifiez si vous téléchargez le fichier complet en comparant la taille des fichiers.

0
Sterling Cobb

Si vous utilisez git-lfs, assurez-vous d'avoir le fichier réel, pas le pointeur!

0
mehmet