J'ai utilisé pg_dump sur une machine et copié le fichier de résultat dans une autre, où j'ai essayé de le restaurer. Je crois que le schéma est le même. Cependant, je reçois:
pg_restore: [archiver] input file does not appear to be a valid archive
J'ai effectué les opérations suivantes:
pg_dump -a -f db.txt dbname
et:
pg_restore -a -d dbname db.txt
Quel est le problème?
postgresql
Gruszczy
la source
la source
Réponses:
Vous effectuez un dumping au format SQL simple, conçu pour alimenter psql. Ceci n'est pas reconnu par pg_restore.
devrait faire l'affaire
la source
psql dbname < db.txt
;)pg_dump
crée par défaut les commandes SQL nécessaires pour recréer les données. Pour le récupérer, il vous suffit d'appelerpsql
(paspg_restore
) avec le fichier en entrée.pg_restore
ne doit être utilisé que pour le format binaire (pas par défaut et moins habituelnon recommandé)pg_dump
. Lire la documentation .Mise à jour: Les
pg_dump
formats binaires (-Fc
-Ft
) à utiliser avecpg_restore
sont acceptables et offrent une flexibilité supplémentaire. Mais ils sont moins standard (non SQL), moins aptes à importer à partir de certains outils (par exemple une interface php) ou à manipuler avec un éditeur de texte, et un peu moins portables vers d’autres versions et même d’autres bases de données. Pour les sauvegardes, je resterais avec le format brut par défaut. Pour les autres scénarios, l'option binary + pg_restore peut être égale ou supérieure.Le point à garder à l’esprit est que dans Postgresql, dans le scénario typique , la sauvegarde est normalement effectuée par pg_dump (plain) et la restauration avec le client de ligne de commande standard ( psql ).
la source
Essayez de passer l'
--format=c
option àpg_dump
. Cela permettrapg_restore
de le restaurer.la source
pg_restore: [archiver] did not find magic string in file header
donc cela ne fonctionne pas pour simple dump SQLpg_dump --format=c ...> archivefile
, puis utilisezpg_restore
onarchivefile
, alors (du moins lorsque je l'ai testé tout à l'heure), cela fonctionne bien. Peut-être que votre fichier est corrompu en quelque sorte? Ou vous avez frappé un bug particulier?C’est ce que je ferais pour sauvegarder mon ancienne base de données et la restaurer.
Pour sauvegarder votre base de données
Pour restaurer cette sauvegarde
En savoir plus sur pg_dump et pg_restore
la source
Pour les utilisateurs de Windows, essayez
Fonctionne comme un charme
la source
Vous pouvez faire quelque chose à la
SOURCE
commande de MySQL :Ensuite, dans le terminal postgresql:
la source
cat dumpFileName | psql -h ip -d nom_base -U nom_utilisateur -W
la source
Ce message d'erreur peut également signifier qu'il y a effectivement un problème avec le fichier de sauvegarde (ou vos hypothèses à ce sujet).
Dans un cas, j'avais monté un fichier de sauvegarde dans un conteneur Docker et essayé de restaurer, mais cela a échoué
does not appear to be a valid archive
. Et en fait, le fichier était vide, car le montage n’avait pas été effectué correctement.la source