web-dev-qa-db-fra.com

pg_dump et pg_restore: le fichier d'entrée ne semble pas être une archive valide

J'ai utilisé pg_dump sur une machine et copié le fichier de résultats sur 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

Qu'est-ce qui ne va pas?

70
gruszczy

Vous êtes en train de vider au format sql ordinaire qui a été conçu pour être alimenté en psql. Ceci n'est pas reconnu par pg_restore.

cat db.txt | psql dbname

devrait faire l'affaire

97
Peter Tillemans

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'appeler psql (pas pg_restore) avec le fichier en entrée. pg_restore ne doit être utilisé que pour le binaire (pas par défaut, et moins habituel non recommandé) format de pg_dump. Lisez le docs .

Mise à jour: le pg_dump formats binaires (-Fc-Ft) à utiliser avec pg_restore sont ok et offrent une flexibilité supplémentaire. Mais ils sont moins standard (non SQL), moins aptes à importer à partir de certains outils (par exemple un frontend 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 m'en tiendrai au format standard par défaut. Pour d'autres scénarios, l'option binaire + pg_restore peut être également ou plus appropriée.

Le point à garder est que dans Postgresql, dans le scénario typique , la sauvegarde se fait normalement par pg_dump (plain) et la restauration avec le client de ligne de commande standard ( psql ).

28
leonbloy

Essayez de passer le --format=c option pour pg_dump. Cela permettra à pg_restore pour le restaurer.

13
psmears

Voici ce que je ferais pour sauvegarder mon ancienne base de données et restaurer

Pour sauvegarder votre base de données

pg_dump --format=c olddb_name > db_dump_file.dump

Pour restaurer cette sauvegarde

pg_restore -v -d newdb_name db_dump_file.dump

En savoir plus sur pg_dump et pg_restore

7
Techie

Pour les utilisateurs de Windows, essayez

type db.txt | psql --username="YOURNAME" dbname

Fonctionne comme un charme

5
user365852

cat dumpFileName | psql -h ip -d nom_base -U nom_utilisateur -W

2
Mayank Raipure

Vous pouvez faire quelque chose avec la commande SOURCE de MySQL:

psql dbname

Ensuite, dans le terminal postgresql:

\i filename
2
greg0ire

Ce message d'erreur peut également signifier qu'il y a en fait quelque chose de mal 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 il a échoué avec does not appear to be a valid archive. Et en fait, le fichier était vide, car le montage n'a pas été effectué correctement.

1
Dag Høidahl