Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2007, 15h19   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 66
Points : 10
Points : 10
Par défaut sauvegarde quotidienne base postgresql sous Windows

Bonjour,
je dois réaliser une sauvegarde automatique d'une base de données postgresql sous windows tous les jours à une certaine heure.
Comment procéder?

Apparemmment, il faut faire un fichier batch, mais ou le placer ? que mettre dedans ? et comment va-t-il lancer la procédure tout seul?
je suis un peu perdu.
bensra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 07h57   #2
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
Citation:
Où le placer...
Peu importe. Le répertoire bin de PostgreSQL pourrait être une bonne idée.

Citation:
Que mettre dedans ?
Un appel à l'outil pg_dump qui réalise les sauvegardes. Voir http://www.postgresql.org/docs/8.2/s...pp-pgdump.html pour les détails.

Citation:
et comment va-t-il lancer la procédure tout seul?
Je ne suis pas un pro de la plate forme Windows mais il me semble qu'il existe un outil pour planifier des exécutions... [ après un peu de recherche sur Google]... les tâches planifiées !
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2008, 09h12   #3
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 65
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 65
Points : 25
Points : 25
Bonjour,
J'ai la même opération à réaliser et je me pose les mêmes questions.
Si tu as trouvé comment procéder, je suis preneur de quelques informations.
merci d'avance
rc_29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2008, 10h15   #4
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
Bonjour
Je ne suis pas très spécialisé sous Mic.. (XP)
Je crois qu'il y a dans le menu Accessoires -> outils système -> Taches planifiées qui doit faire l'équivalence de crontab Unix.
Il suffit de faire un xxx.bat dans le repertoire bin de Pg et l'appeler avec la boite de selection fichiers de cet utilitaire.
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2008, 13h32   #5
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 65
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 65
Points : 25
Points : 25
Merci bien pour la réponse.
La partie concernant la mise en place d'une tache planifiée sous Windows, je vois comment faire, j'ai déjà eu l'occasion d'en utiliser.
La où je reste dans le flou, c'est dans le contenu du fichier .bat pour sauvegarder ma base de données.
Je souhaite sauvegarder quotidiennement ma base de données (structure + données).
Dans la doc de postgreSQL, j'ai trouvé des infos concernant la commande pg_dump, mais je ne vois pas trop comment l'utiliser dans un .bat, ni quelles options ajouter à cette commande pour sauvegarder ma base (strucutre+données)
rc_29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2008, 15h07   #6
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
Il faut lire les options de pg_dump dans la documentation
(strucutre+données) ??? (si votre (+) veut dire (et)) utilisez -s pour la structure sans les données
-o c'est pour les (OID) -C pour recreer la base etc ...

le fichier .bat qui est dans le rep bin de PG contient uniquement l'instruction avec son path:

pg_dump.exe -o -C mabase > c:\mon_rerpertoire_au choix\mabase.saved
(retour de ligne)

pour faire plusieurs instructions il faut aller à ligne et faire suivre
les commandes.

Pour restorer rien a voir avec le.bat précédent
psql.exe c:\lmon_rerpertoire_au_choix\mabase < mabase.saved

Pour plus d'infos cherchez sur le web "faire un fichier batch dos"
Bon courage
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 16h58   #7
Nouveau Membre du Club
 
Inscription : janvier 2005
Messages : 72
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 72
Points : 29
Points : 29
Par défaut sauvegarde quotidienne avec compession

Ceci est un script de sauvegarde windows :

il sauvegarde toutes les base dans set "rep_sav=C:\\backup\\db"

principe création d'un fichier temporaire "backup_pg_temp.bat"

qui contient pour chaque base :

- création des répertoires sur C:\\backup\\db\\mabase1 s'il n'existe pas
- création du dump (je préfère le format sql)
- compression du dump avec gzip.exe

placer ce code dans un backup_all_pg.bat
et placer l'appel de ce fichier dans le gestionnaire de tache planifiés


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
@ECHO OFF
echo rem -------------------------------------------------
echo rem  Sauvegarde FULL postgres
echo rem -------------------------------------------------
 
echo IF NOT exist postgres md postgres > backup_pg_temp.bat
 
SET rep_sav=C:\\backup\\db
SET nom_serveur=localhost
SET nom_user=postgres
 
rem SET fic=sav_%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%.dump
 
SET vheure=%time:~0,2%
IF /i %vheure% lss 10 SET vheure=0%time:~1,1%
 
SET vmin=%time:~3,2%
IF /i %vmin% lss 10 SET vmin=0%time:~4,1%
 
SET vsec=%time:~6,2%
IF /i %vsec% lss 10 SET vsec=0%time:~7,1%
 
SET fic=_%date:~6,4%%date:~3,2%%date:~0,2%_%vheure%%vmin%%vsec%.dump
 
 
psql -U%nom_user% -h%nom_serveur% -t -c "select 'if not exist %rep_sav%\\postgres\\'||datname||' md %rep_sav%\\postgres\\'||datname from pg_database where datname not in ( 'template0', 'template1', 'postgres') " > %rep_sav%\\backup_pg_temp.bat
psql -U%nom_user% -h%nom_serveur% -t -c "select 'pg_dump -Upostgres -f %rep_sav%\\postgres\\'||datname||'\\'||datname||'_%fic%   -D -F p  '||datname from pg_database where datname not in ( 'template0', 'template1', 'postgres') " >> %rep_sav%\\backup_pg_temp.bat
psql -U%nom_user% -h%nom_serveur% -t -c "select 'gzip -9 -S .zip  %rep_sav%\\postgres\\'||datname||'\\'||datname||'_%fic%  ' from pg_database where datname not in ( 'template0', 'template1', 'postgres') " >> %rep_sav%\\backup_pg_temp.bat
 
%rep_sav%\\backup_pg_temp.bat
pause
A+
matta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 15h12   #8
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 65
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 65
Points : 25
Points : 25
Merci beaucoup pour ton script, mais je n'ai pas réussit à le faire fonctionner correctement.
Et je cherche toujours comment sauvegarder ma base de données postgresql sous Windows.

J'ai regardé dans la faq et dans un fichier .bat, j'ai mis l'instruction suivante

Code :
pg_dump -i -h 192.168.40.15 -p 5432 -U postgres -F c -v -f "c:/Temp/save.back" "mabase";
Déjà, dans la fenêtre de commandes, je dois renseigner le mot de passe, et même si l'exécution créé bien le fichier "save.back", il est vide.
rc_29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 16h21   #9
Nouveau Membre du Club
 
Inscription : janvier 2005
Messages : 72
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 72
Points : 29
Points : 29
Par défaut mot de passe

Pour ne pas avoir a taper le mot de passe il existe deux manières :
soit modifier le pg_hba.conf de ton serveur et
ajouter
host all all XXX.XXX.XXX.XXX/32 trust

XXX.XXX.XXX.XXX etant ton ip

et modifier posgresql.conf mettre listen_addresses = '*' a la place de
listen_addresses = 'localhost'
redemarrer le serveur

OU si tu est en dhcp

créer sous windows vista :
C:\Users\Matta\AppData\Roaming\postgresql\pgpass.conf avec

YYY.YYY.YYY.YYY:5432:*:postgres:lemotdepasse

YYY.YYY.YYY.YYY est l'ip du serveur

sous XP il faut faire a peu prés la même chose mais les répertoires sont différents

sinon
Code :
1
2
 
pg_dump -i -h 192.168.40.15 -p 5432 -U postgres -F c -v -f "c:/Temp/save.back" "mabase"
"mabase" je ne suis pas sur que mabase puisse être avec des doubles quotes

pour le script arrive tu a générer le backup_pg_temp.bat ?

PS : tu n'as pas besoin du -i a priori je préfère les formats plan -F p
matta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 17h17   #10
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 65
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 65
Points : 25
Points : 25
Je vous remercie beaucoup pour l'attention que vous portez à mon problème.
Effectivement, le nom de ma base ne doit pas être entre guillemets.
J'ai trouvé comment sauvegarder et restaurer ma base de données.
J'utilise les commandes suivantes :

pour la sauvegarde...
Code :
1
2
 
   pg_dump.exe -h localhost -p 5432 -U postgres -F c -v -f "C:\Temp\mabase.backup" mabase
pour la restauration...
Code :
1
2
 
   pg_restore.exe -h localhost -p 5432 -U postgres -d mabase-v "C:\Temp\mabase.backup"
Encore merci pour m'avoir aidé à trouver la solution
rc_29 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/10/2008, 15h39   #11
Nouveau Membre du Club
 
Avatar de cubepiege
 
Inscription : novembre 2004
Messages : 136
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 136
Points : 39
Points : 39
Hello, une autre solution sous windaube (perso je suis plus linux).
J'ai fait un petit script en vbs.
Il suffit de le lancer une fois par jour vers 23 heures par exemple:
Il fait au passage un vaccum analyse puis sauvegarde en faisant tourner les backup sur 6 jours.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
Dim Wshell
SET Wshell = Createobject("Wscript.Shell")
SET oFSO = CreateObject("Scripting.FileSystemObject")
SET conn = CreateObject("ADODB.Connection")
SET rst = CreateObject("ADODB.Recordset")
 
stRep = "d:\sauv\"
arRep = "d:\sauv\archive\"
 
'------------------------------------------'
'Connexion à la base pour déterminer dynamiquement le nom des bases à sauvegarder
'------------------------------------------'
 
'Initialisation de la connexion à la base postgre locale
conn.ConnectionString = "DRIVER={PostgreSQL Unicode};" _
			& "SERVER=127.0.0.1;" _
			& "DATABASE=postgres;" _
			& "UID=xxx;PWD=xxx"
conn.open
 
'on initialise la liste des bases
sql = "SELECT datname FROM pg_database WHERE ((NOT(pg_database.datname)='template0' AND NOT(pg_database.datname)='template1' AND NOT(pg_database.datname)='postgres'));"
rst.open sql,conn
 
'Première passe: on nettoie la base puis
'On sauvegarde les bases avec pg_dump
while not rst.eof
for each datname in rst.fields
Wshell.Run "vacuumdb -z -d "&datname&" -h localhost -U postgres",1,True
Wshell.Run "pg_dump -h localhost -U postgres -F c -f "&stRep&datname&".dmp "&datname,1,True
next
rst.movenext
wend
conn.close
 
'------------------------------------------'
'Constitution de la variable du nom du fichier permettant de rajouter la date du jour
Dim FDate, ExtDate
FDate = FormatDateTime(Date,0)
Annee = Mid(FDate, 7, 4)
Mois = Mid(FDate, 4, 2)
Jour = Mid(FDate, 1, 2)
ExtDate = Annee&Mois&Jour&"-"
 
'------------------------------------------'
'On détermine l'endroit à scanner pour renommer les fichiers + rennomage en se servant de la valeur ExtDate ci-dessus
Dim stRep 'Nom du répertoire à parcourir
Dim arRep 'Nom du repertoire Archive
Dim oFSO,oFl
If oFSO.FolderExists(stRep) Then
 For each oFl in  oFSO.GetFolder(stRep).Files
 oFl.Move arRep&ExtDate&oFl.Name
 Next
End If
 
'------------------------------------------'
'On efface les fichiers vieux de plus de 5 jours
If oFSO.FolderExists(arRep) Then
 For each oF2 in oFSO.GetFolder(arRep).Files
 If DateDiff("d", oF2.DateLastModified, Now) > 5 Then
  oF2.delete
 End If
 Next
End If
Voilà avec çà, chaque base rajouter dans ton instance est automatiquement sauvegardée.
Bye
cubepiege est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2009, 15h04   #12
Invité de passage
 
Inscription : septembre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 16
Points : 4
Points : 4
Par défaut reponse script de sauvegarde

j'ai essaye le script de cubepiege mais au niveau de cette ligne :
Wshell.Run "vacuumdb -z -d "&datname&" -h localhost -U postgres",1,True
il ya une erreur: fichier introuvable.
est-ce que cubepiege peut m'aider à corriger cette erreur la .Merci d'avance
sougrinoma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2009, 13h39   #13
Modérateur
 
Inscription : octobre 2008
Messages : 1 509
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 509
Points : 2 041
Points : 2 041
Les versions assez récentes de PostgreSQL ont autovacuum activé si bien qu'il n'est pas nécessaire d'exécuter vacuumdb en tant que commande externe.
Le plus simple est de l'enlever du script.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2009, 14h49   #14
Invité de passage
 
Inscription : septembre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 16
Points : 4
Points : 4
j'utilise postgesql 8.2 .Quand j'enlève cette ligne du script,la ligne suivante signale la meme erreur
sougrinoma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2009, 02h33   #15
Modérateur
 
Inscription : octobre 2008
Messages : 1 509
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 509
Points : 2 041
Points : 2 041
L'erreur vient sans doute du fait que pg_dump.exe n'est pas dans le PATH
Il faudrait le lancer via son chemin complet pour éviter ça.
Pour la version 8.2, autovacuum existe mais je ne suis pas sûr qu'il soit activé par défaut. Ca se vérifie sous psql avec
et si nécessaire c'est changeable dans le fichier postgresql.conf
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2009, 18h10   #16
Nouveau Membre du Club
 
Avatar de cubepiege
 
Inscription : novembre 2004
Messages : 136
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 136
Points : 39
Points : 39
Hello les gens.
Je confirme, il faut renseigner dans le PATH (variables d 'environnement) l'emplacement des exe de postgres dans windaube.

bye
cubepiege est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h39.


 
 
 
 
Partenaires

Hébergement Web