89 votes

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 résultat sur une autre, où j'ai essayé de le restaurer. Je pense que le schéma est le même. Cependant, j'obtiens :

pg_restore: [archiver] input file does not appear to be a valid archive

J'ai fait les opérations suivantes :

pg_dump -a -f db.txt dbname

et :

pg_restore -a -d dbname db.txt

Qu'est-ce qui peut bien se passer ?

115voto

Peter Tillemans Points 1226

Vous transmettez les données au format SQL simple, qui a été conçu pour être utilisé dans le cadre d'un projet de recherche. psql . Ceci n'est pas reconnu par pg_restore .

cat db.txt | psql dbname

Cela devrait faire l'affaire

37voto

leonbloy Points 1958

pg_dump crée par défaut les commandes sql nécessaires pour recréer les données. Pour les récupérer, il suffit d'invoquer 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é ) du format pg_dump . Lire l'article docs .

Mise à jour : Le pg_dump les formats binaires ( -Fc -Ft ) qui doivent être utilisés avec pg_restore sont acceptables, et offrent une certaine flexibilité supplémentaire. Mais ils sont moins standards (non SQL), moins aptes à l'importation depuis certains outils (par exemple un frontend php) ou à la manipulation 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 tiendrais au format simple par défaut. Pour d'autres scénarios, l'option binaire + pg_restore peut être aussi ou plus appropriée.

Ce qu'il faut retenir, c'est que dans Postgresql, dans l'onglet scénario typique la sauvegarde se fait normalement par pg_dump (en clair) et la restauration avec le client de ligne de commande standard ( psql ).

18voto

XDarkMario Points 21

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

10voto

Nick T Points 2412

Voici ce que je ferais pour sauvegarder mon ancienne base de données et la 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

Plus d'informations sur pg_dump y pg_restore

6voto

Pour les utilisateurs de Windows, essayez

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

Fonctionne comme un charme

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X