#1 Fri 23 May 2014 13:29
- Thomas Williamson
- Participant actif
- Lieu: Poitiers
- Date d'inscription: 16 Nov 2008
- Messages: 92
[pg_dump] Sauvegarde d'une table
Bonjour,
Je cherche à créer un fichier BATCH pour sauvegarder de temps à autre une table afin de tester des modifications dessus, et pouvoir la restaurer si besoin. Je galère avec les lignes de commande mais je pense approcher du but. Quelqu'un peut-il me donner son avis sur le script suivant :
Code:
"C:\Program Files\PostgreSQL\9.2\bin\pg_dump.exe" --host localhost --port 5432 --username postgres --format plain --ignore-version --verbose --file "C:\Users\UserName\Desktop\filename.backup" --table schema.table db_thomas
Bien sûr, je remplace UserName par le nom de mon répertoire et schema / table correspondent à un schéma et une table qui existent. J'exécute le fichier *.bat et la fenêtre Cmd me demande un mot de passe. Je ne peux pas taper de texte dans cette fenêtre donc je ne peux pas renseigner mon mot de passe... J'ai essayé de passer l'option --password dans ma ligne de commandes mais pg_dump me renvoie un message d'erreur "Trop d'arguments en ligne de commande".
J'ai aussi simplifié la ligne en comme ci-dessous et je réalise que le mot de passe est demandé dès cette étape (cf. pièce jointe)...
Code:
"C:\Program Files\PostgreSQL\9.2\bin\pg_dump.exe"
Je tourne un peu en rond... Merci pour votre aide !
Thomas
Hors ligne
#2 Fri 23 May 2014 13:58
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [pg_dump] Sauvegarde d'une table
Bonjour,
Vous pouvez faire cela facilement avec PgAdmin (bouton droit, sauvegarder la table)
S'il s'agit de conserver temporairement une table pour faire des tests, vous pouvez aussi facilement en faire un copie directement dans la base:
Code:
create table table_secours as select * from table_travail;
En mode batch, vous pouvez stocker le mot de passe dans un fichier .pgpass: il sera utilisé lors de l'appel de pg_dump (http://www.postgresql.org/docs/9.3/stat … gpass.html)
Nicolas
Hors ligne
#3 Fri 23 May 2014 14:06
- Thomas Williamson
- Participant actif
- Lieu: Poitiers
- Date d'inscription: 16 Nov 2008
- Messages: 92
Re: [pg_dump] Sauvegarde d'une table
Merci Nicolas ! J'ai trouvé la doc entre temps pour le fichier pgpass, mais comment le passer dans la ligne de commandes ? J'imaerais bien aller jusqu'au bout réussier à utiliser un peu le backup avec pg_dump. Etant donné que dans le pgpass.conf précise l'hôte, le port, etc. ces options sont à retirer de la ligne de commande, non ? Ma ligne de commande qui a évolué un peu :
Code:
cd "C:\Program Files (x86)\pgAdmin III\1.18" pause pg_dump.exe C:\Users\t_williamson\AppData\postgresql\pgpass.conf -C -f C:\Users\t_williamson\Desktop\text_export.sql -t schema1.lakes thomas
Dommage que la doc en ligne ne donne pas plus de précisions sur comment faire référence à ce fichier...
EDIT : en pièce jointe, le message que j'obtiens.
Merci encore !
Thomas
Dernière modification par Thomas Williamson (Fri 23 May 2014 14:11)
Hors ligne
#4 Fri 23 May 2014 14:21
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [pg_dump] Sauvegarde d'une table
La doc concernant l'utilisation de pgpass.conf est dans la partie pgpass de la doc (http://www.postgresql.org/docs/9.3/stat … gpass.html) et pas la partie pg_dump: tous les programmes qui utilisent libpq (la librairie client de PG) se basent sur le meme mécanisme pour lire ce fichier:
Sous windows, il faut placer ce fichier dans %APPDATA%\postgresql\pgpass.conf.
Il sera alors automatiquement lu par pg_dump.
la ligne de commande serait alors:
Code:
pg_dump.exe -C -f C:\Users\t_williamson\Desktop\text_export.sql -t schema1.lakes thomas
(attention: le fichier de dump contiendra la commande pour recréer la BD "thomas". Vous aurez plus de mal a restaurer uniquement cette table dans votre base de données en faisant cela: il faudra supprimer et recréer toute la base)
Nicolas
Hors ligne
#5 Fri 23 May 2014 14:28
- Thomas Williamson
- Participant actif
- Lieu: Poitiers
- Date d'inscription: 16 Nov 2008
- Messages: 92
Re: [pg_dump] Sauvegarde d'une table
Ca ne marche toujours pas...
J'ai repassé la ligne de commande ci-dessous et le mot de passe est demandé en bout de course (cf. pièce jointe)... Pourtant j'ai bien créé le fichier pgpass.conf ici : C:\Users\t_williamson\AppData\postgresql\ avec comme contenu cette unique ligne : localhost:5432:thomas:postgres:postgres. Il semble que pg_dump ne lise pas le fichier... Pour info, j'ai dû créer le répertoire postgresql dans AppData, qui n'existait pas.
Code:
pg_dump.exe -h localhost -p 5432 -U postgres -f C:\Users\t_williamson\Desktop\test_export.sql -t schema1.lakes thomas
Une idée de l'origine du problème ?
Merci !
Thomas
Hors ligne
#6 Fri 23 May 2014 14:43
- Thomas Williamson
- Participant actif
- Lieu: Poitiers
- Date d'inscription: 16 Nov 2008
- Messages: 92
Re: [pg_dump] Sauvegarde d'une table
En définissant la variable PGPASSWORD dans les variables d'environnement, ça marche bien ! Bizarre que le fichier pgpass.conf ne soit pas détecté. Si quelqu'un à une explication, je suis preneur !
Thomas
Hors ligne
#7 Fri 23 May 2014 15:50
- Thomas Williamson
- Participant actif
- Lieu: Poitiers
- Date d'inscription: 16 Nov 2008
- Messages: 92
Re: [pg_dump] Sauvegarde d'une table
Après creusage du sujet, voici mes scripts fonctionnels :
1. Dump d'une table :
Code:
"C:\Program Files\PostgreSQL\9.2\bin\pg_dump.exe" -h localhost -p 5432 -U postgres -v -f D:\test.sql -t schema.table database
2. Restauration de la table :
Code:
"C:\Program Files\PostgreSQL\9.2\bin\psql.exe" -h localhost -p 5432 -U postgres -d database -f D:\test.sql
J'ai solutionné le problème du password en configurant une nouvelle variable d'environnement PGPASSWORD (Panneau de configuration > Système > Paramètres système avancés > Variables d'environnement > Nouvelle).
Merci pour votre aide !
Thomas
Dernière modification par Thomas Williamson (Fri 23 May 2014 15:51)
Hors ligne