2012-12-04 3 views
10

Je vide ma base de données 'mydatabase' dans un fichier texte 'mydatabase.sql' via la ligne de commande.Comment faire pour pg_restore

"C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_dump.exe " --host localhost --port 5432 --username "postgres" --no-password --verbose --file "C:\Users\User 1\Desktop\mydatabase.sql" "mydatabase" 

Cela se passe bien. Mais après de nombreuses tentatives, je ne peux pas faire un pg_restore ce fichier à la base de données avec des données.
Mais si je supprime toutes les tables dans cette base de données, je peux le faire avec:

psql -f "C:\Users\User 1\Desktop\mydatabase.sql" "mydatabase" "postgres" 

Ce de récupérer toutes les données. Le problème est que je ne peux pas courir PGsl par VBNET/shell, donc je préférerais besoin pg_restore.exe Ceci est mon essai:

"C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_restore.exe " -i -h localhost -p 5432 -U postgres -d "mydatabase" -v "C:\Users\User 1\Desktop\mydatabase.sql" 

... où je reçois un message:

C : \ Utilisateurs \ Utilisateur 1> "C:/Program Files (x86) /PostgreSQL/9.1/bin/pg_restore.exe" -i -h localhost -p 5432 -U postgres -d "mydatabase" -v "C: \ Utilisateurs \ Utilisateur 1 \ Desktop \ mydatabase.sql " binaire non valide" C:/Program Files (x86) /PostgreSQL/9.1/bin/pg_restore.exe " pg_restore.exe: le fichier d'entrée [archiver] ne semble pas être un valide archive

Avant d'essayer de restaurer J'ai la base de données vide 'mydatabase' sur le serveur (sans les tables). S'il vous plaît aidez-nous à faire fonctionner pg_restore avec 'mydatabase.sql' qui est sauvegardé avec pg_dump et qui contient évidemment des données correctes pour que je puisse l'utiliser via une ligne de commande pure ou VBNET/shell.

Répondre

11

Dans votre pg_dump, spécifiez l'indicateur -F t. Cela indique à pg_dump de créer la sauvegarde au format tar, ce qui est approprié pour la restauration via pg_restore.

"C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_dump.exe " --host localhost --port 5432 --username "postgres" --no-password --verbose -F t --file "C:\Users\User 1\Desktop\mydatabase.sql" "mydatabase" 
+0

Je vois. Ce travail est :) Merci beaucoup! –

Questions connexes