IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration PostgreSQL Discussion :

Sauvegarde quotidienne base PostgreSQL sous Windows


Sujet :

Administration PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 68
    Points : 39
    Points
    39
    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.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 143
    Points
    143
    Par défaut
    Où le placer...
    Peu importe. Le répertoire bin de PostgreSQL pourrait être une bonne idée.

    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.

    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 !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    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

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    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)

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Points : 262
    Points
    262
    Par défaut
    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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 100
    Points : 61
    Points
    61
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 100
    Points : 61
    Points
    61
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       pg_dump.exe -h localhost -p 5432 -U postgres -F c -v -f "C:\Temp\mabase.backup" mabase
    pour la restauration...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre régulier Avatar de cubepiege
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 161
    Points : 78
    Points
    78
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 83
    Points : 42
    Points
    42
    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

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    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.

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 83
    Points : 42
    Points
    42
    Par défaut
    j'utilise postgesql 8.2 .Quand j'enlève cette ligne du script,la ligne suivante signale la meme erreur

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    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

  16. #16
    Membre régulier Avatar de cubepiege
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 161
    Points : 78
    Points
    78
    Par défaut
    Hello les gens.
    Je confirme, il faut renseigner dans le PATH (variables d 'environnement) l'emplacement des exe de postgres dans windaube.

    bye

  17. #17
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    Bonjour à tous,

    J'ai essayé la commande de sauvegarde cité ci-dessous, mais sans succès


    Citation Envoyé par rc_29 Voir le message
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       pg_dump.exe -h localhost -p 5432 -U postgres -F c -v -f "C:\Temp\mabase.backup" mabase
    pour la restauration...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    En exécutant la commande (ci-dessous) en tant que tâche planifiée ou en ligne de commande PostgreSQL, rien ne se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pg_dump –h 127.0.0.1 –p 5432 -U postgres –v –f "C:\pgdump_test.sql" test
    Quand je dis rien ne se passe, ça veut dire que le fichier pgdump_test.sql n'est pas créé.

    Merci d'avance pour votre aide.

  18. #18
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Je vous conseille vivement le format directory pour la sauvegarde.

    Voir ici http://www.developpez.net/forums/d16...n/#post8895812

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme postgresql sous windows
    Par sunshine2004 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/03/2005, 04h21
  2. Sauvegarde physique base ouverte sous 8.i
    Par hkhan dans le forum Administration
    Réponses: 7
    Dernier message: 19/10/2004, 12h22
  3. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  4. [PostgreSQL]PostgreSQL sous windows mais sans Cygwin
    Par manou dans le forum Administration
    Réponses: 8
    Dernier message: 17/04/2003, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo