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

13

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?

maja
la source

Réponses:

19

Vous restaurez avec pg_restore --format=c ...mais pg_dumpn'a pas été fait avec --format=c, il a été fait avec la valeur par défaut, simple format.

Depuis la pg_dumppage 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 alimenté directement à l' psqloutil de ligne de commande, pg_restorene sait pas ce que c'est, ce qui est la raison de 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.sqldans le 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 l' --createoption n'est pas présente dans l' pg_dumpinvocation.

D'un autre côté, vous pouvez réinvoquer le vidage en ajoutant --format=cà ses options. Ce serait alors le contraire: pg_restoredoit être utilisé pour interpréter un fichier de vidage au format personnalisé.

Daniel Vérité
la source
0

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.

Sterling Cobb
la source
0

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

mehmet
la source