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?
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é.
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.
Si vous utilisez git-lfs, assurez-vous d'avoir le fichier réel, pas le pointeur!