PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 05/10/2011 20:18:30

afrofip
Membre

Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Bonjour à tous.
Je n'ai trouvé aucun fil de discussion qui reponde à ma question (peut être ai-je mal cherché?), donc je crée un nouveau fil. Voici mon problème:

Contexte

    -J'ai crée une base de donnée sur mon ordinateur personnel (Systeme windows 7) à laquelle j'accede en local avec une interface Java faite
     maison . Le mot de passe du super utilisateur postgres sur mon ordinateur personnel est "AA" (par exemple).

    -Maintenant, je doit transporter la base sur un serveur distant. 

    -postgreSQL est installé sur le serveur distant, et je peux accéder au repertoire de postgreSQl sur ce serveur à l'aide de l'explorateur de
     fichiers windows. Le mot de passe du super utilisateur postgres sur le serveur distant est "BB".

    -je n'ai encore créer aucune base ni configurer aucune connection sur le serveur distant.
 
Questions

    1. Qu'est ce que je dois faire pour transferer ma base de donnée (définition de la base + données déjà presentes) de mon ordinateur
        personnel vers le serveur distant, sans ecraser le mot de passe du compte postgres dejà installé sur le serveur distant? Quels fichiers
        dois-je copier?

    2. Quand j'ouvre l'executable de pdAdminIII situé sur le serveur distant à partir de mon ordinateur personnel, ce n'est pas les
       données du serveur distant qui s'affichent (d'ailleurs, comme je l'ai dit,  je n'ai encore rien créer dessus), mais plutôt celle du répertoire
       postgreSQL de MON ordinateur personnel. Pourrais-je en savoir la cause?

Merci d'avance.

Dernière modification par afrofip (05/10/2011 20:19:54)

Hors ligne

#2 05/10/2011 20:40:33

rjuju
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

afrofip a écrit :

1. Qu'est ce que je dois faire pour transferer ma base de donnée (définition de la base + données déjà presentes) de mon ordinateur
        personnel vers le serveur distant, sans ecraser le mot de passe du compte postgres dejà installé sur le serveur distant? Quels fichiers
        dois-je copier?

Il faut faire un dump de la base de donnée voulue, et la restaurer sur le serveur distant (via pg_dump et pg_restore et non directement par les fichiers du disque).
Les commandes seraient pg_dump -Fc -h votre_ip nom_de_la_base > sauvevegarde.backup
puis
pg_restore -h serveur_distant -f sauvegarde.backup -d nom_de_la_base

Quelques options sont à modifier selon que la base de donnée est déjà créée ou non sur le serveur distant.
Le dump copiera les données de la base mais pas les informations de rôle de connexion.

afrofip a écrit :

2. Quand j'ouvre l'executable de pdAdminIII situé sur le serveur distant à partir de mon ordinateur personnel, ce n'est pas les
       données du serveur distant qui s'affichent (d'ailleurs, comme je l'ai dit,  je n'ai encore rien créer dessus), mais plutôt celle du répertoire
       postgreSQL de MON ordinateur personnel. Pourrais-je en savoir la cause?

La visualisation des données via pgAdmin n'est pas lié de la ou vous lancez l'exécutable, mais du serveur configuré. Je pense que vous avez une configuration du type postgres@votre_ip:5432. Pour voir les données du serveur distant, vous pouvez le faire depuis votre ordinateur personnel en ajoutant un second serveur et en mettant dans "hote" le dns ou l'ip du serveur distant.

Dernière modification par rjuju (05/10/2011 20:44:25)

Hors ligne

#3 05/10/2011 20:54:05

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

rjuju a écrit :

Quelques options sont à modifier selon que la base de donnée est déjà créée ou non sur le serveur distant.
Le dump copiera les données de la base mais pas les informations de rôle de connexion.

Merci rjuju. Si je comprend bien:
- j'ouvre psql
- je rentre la premiere commande pour copier ma base de donnée
- je rentre la seuxieme commande pour "l'enregistrer" sur le serveur.

Par contre, j'aimerais justement savoir quels sont les options à modifier, puisque la base de donnée n'est pas encore crée sur le serveur?

Hors ligne

#4 05/10/2011 22:03:40

rjuju
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

afrofip a écrit :
rjuju a écrit :

Quelques options sont à modifier selon que la base de donnée est déjà créée ou non sur le serveur distant.
Le dump copiera les données de la base mais pas les informations de rôle de connexion.

Merci rjuju. Si je comprend bien:
- j'ouvre psql
- je rentre la premiere commande pour copier ma base de donnée
- je rentre la seuxieme commande pour "l'enregistrer" sur le serveur.

Par contre, j'aimerais justement savoir quels sont les options à modifier, puisque la base de donnée n'est pas encore crée sur le serveur?

Non, ce sont des exécutables windows, il faut donc les lancer en ligne de commande.

Pour les options, est-ce que le serveur est déjà installé ? oui a priori s'il y a un utilisateur postgres existant.
Pour les options différents, il faut rajouter un -C (sensible à la casse) pour dire de créer la base de donnée cible

la commande est donc
pg_dump -C -Fc -h votre_ip nom_de_la_base > sauvevegarde.backup

et le restore se fera comme ça :

pg_restore -h serveur_distant -f sauvegarde.backup -d postgres

l'aide est la : http://docs.postgresqlfr.org/9.0/app-pgdump.html et http://docs.postgresqlfr.org/9.0/app-pgrestore.html

Hors ligne

#5 06/10/2011 08:06:54

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Merci rjuju
Je teste ça et je vous fait un retour
crdlmt

Hors ligne

#6 06/10/2011 14:32:37

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Bonjour
    La commande pg_dump... fonctionne à merveille.

    Le problème se pose au moment de la restauration vers le serveur distant. Mais je pense que le problème est lié à l'installation de postgreSQL sur le serveur distant (qui fonctionne sous Windows Server 2003).

    En effet, lorsque je vai sur le serveur distant et que j'ouvre pgAdminIII depuis le dit serveur (et non depuis mon ordi personnel), et que j'essaye de configurer une nouvelle connection en local, il me sort l'erreur selon laquelle "le serveur refuse les connections TCP/IP" (pourtant, j'ai bien saisi l'hôte: localhost). J'ai vérifié les fichiers pg_hba.conf et pg_config.conf conformément aux prescriptions de la documentation, mais je n'ai rien trouvé d'anormal. J'ai même complété le fichier pg_hba.conf pour lui permettre de detecter toutes les addresses.

    Mais ensuite, je me suis souvenu que vers la toute fin de l'installation de PostgreSQL sur ce serveur, j'ai eu une erreur ;"le lancement post-installation n'a pas pu être réalisé, l'installation est peut être incomplete". J'ai essayer de réinstaller le logiciel, mais la même erreur s'est produite.

pourrait-il s'agir d'un problème de compatibilité entre PostgreSQL 9.0.4.1 et Windows Server 2003?

Hors ligne

#7 06/10/2011 14:52:01

gleu
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Non, pas de soucis de compatibilité entre PostgreSQL entre PostgreSQL 9.0 et Windows Server 2003. Il faudrait regarder dans les logs de l'installeur.


Guillaume.

Hors ligne

#8 06/10/2011 15:43:15

rjuju
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Mais ensuite, je me suis souvenu que vers la toute fin de l'installation de PostgreSQL sur ce serveur, j'ai eu une erreur ;"le lancement post-installation n'a pas pu être réalisé, l'installation est peut être incomplete". J'ai essayer de réinstaller le logiciel, mais la même erreur s'est produite.

L'erreur "le lancement post-installation n'a pas pu être réalisé" est souvent lié aux droits de lecture/écriture sur le répertoire DATA de votre installation postgresql. Assurez-vous que les droits ntfs sont corrects avec l'utilisateur postgres avant de réinstaller la base de donnée.

Dernière modification par rjuju (06/10/2011 15:44:05)

Hors ligne

#9 07/10/2011 12:49:09

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Bonjour
Effectivement les droits d'écritures n'etaient pas accordée à l'utilisateurs postgreSQL. Je (ou plutôt l'informaticien de la boite) lui a accordé tous les droits sur le dossier ou est installe la base de donnee.
J'ai relancé l'installtion, mais sans améliorations! Toujours l'erreur en fin d'installation: "problem running post-install step. Installation may not be complete correctly". Et le serveur refuse toujours de se connecter en local: "Connection refused (0x0000274D/10061) Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?". Le firewall a été configuré pour accepter les entrants sur le port 5432. Je suis à court d'idées (et de souffle). Toute suggestion, même la plus farfelue possible, serait la bienvenue!
Merci.

Au fait @Gleu, je ne trouve pas la log de l'installateur...

Dernière modification par afrofip (07/10/2011 12:50:52)

Hors ligne

#10 07/10/2011 12:54:34

rjuju
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Lors de l'installation, vous avez un répertoire ou sont installés les exécutables de Postgresql, mais vous pouvez choisir un répertoire différent pour le DATA, et il faut alors s'assurer que celui-ci a également les droits en écriture. Il faut aussi s'assurer que l'utilisateur postgres ne soit pas administrateur.

Une fois ceci vérifié, sans le log de l'installeur, vous pouvez essayer un initdb.exe -D "repertoire_data" (soit un répertoire spécifique, soit le répertoire postgres\data) et voir si celui-ci vous renvoie plus d'informations.

Dernière modification par rjuju (07/10/2011 12:56:14)

Hors ligne

#11 07/10/2011 17:59:02

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Bonjour à tous.

Voici l'épilogue (mitigée) à mon problème.
J'ai lancé initdb.exe en invite de commande et j'ai reçu comme message d'erreur:Impossible de lancer le serveur depuis un compte administrateur . Effectivement, c'est sur un compte (super)administrateur du serveur que j'essayer de faire tourner pgAdminIII. @rjuju, lorsque vous me demandiez de vérifier que le compte postgreSQL n'est pas administrateur, vous deviez peut-être vous dire que j'essayais de faire les opérations depuis le compte postgres? J'ai omis de mentionner que j'étais sur un autre compte.

La suite de mon histoire est un pb humain. Vous n'êtes pas obligés de la lire c'est sans interêt. je vous aurais prévenu!
  J'ai demandé à l'administrateur du reseau de m'ouvrir le compte postgres qui avait été crée lors de l'installation, ce qu'il a refusé pour des raisons relativement obscures. Peut-être, et je le comprends, à t-il été effrayé de voir un stagiaire étudiant et sans aucune formation proprement dite en informatique tripoter son serveur....Quoiqu'il en soit, il m'a installer postgres sur un desktop connecter au reseau. C'est moins..disons cool, mais ça me suffit largement pour mener à bien mon projet de fin d'étude.

Merci à tous.

Hors ligne

#12 07/10/2011 18:22:02

rjuju
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Je n'utilise pas trop le one clic installer, mais je pensais qu'il créait un compte puis lançait le initdb avec le compte qu'il venait de créer. C'est donc à partir de ce compte la qu'il faut lancer le initdb (vous pouvez créer un fichier .bat avec les bonnes options et faire un shif-clic droit dessus puis "exécuter en tant que").
La politique de sécurité vous refusant un compte utilisateur mais vous permettant d'utiliser un compte administrateur est quelque peu surprenante, mais il a sans doute ses raisons.
En tout cas, tant mieux si vous pouvez avancer avec cette solution.

Hors ligne

#13 15/12/2011 13:43:16

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Bonjour à tous.
Je n'ai pas jugé utile de créer une nouvelle discussion, puisse que le problème que je vai poser concerne le même projet. Les précédents post vous mettrons donc brièvement dans le contexte.
Je suis au terme du projet, et maintenant, j'aimerais mettre en place la partie sauvegarde et restauration de l'application. Ce que je crois savoir:
1°) pg_dump permet de sauvegarder une base de donnée. Mais pas les rôles.
2°)pg_restore permet de restaurer une base de donnée.
3°)pg_dumpall permet de sauvegarder toutes les bases de données d'un serveur ainsi que les rôles.
3°)pg_sql est le seul moyen de restaurer une sauvegarder faite avec pg_dumpall.

Je souhaitais récupérer les base de données sur le serveur distant pour les restaurer sur mon ordinateur perso (avec tous les roles de connexion inclus). A cet effet, j'ai utilisé pg_dumpall pour copier les données du serveur distant.pg_dump -h 10.242.109.25 -W -U postgres -p 5432   > D:\Sauvegarde\backup.dump

Maintenant, je souhaite les restaurer sur mon ordinateur. Je vai utiliser le code suivant, tapé dans l'invide de commande windows: psql -h localhost -W -U postgres -p 5432  -c D:\Sauvegarde\backup.dump

Question
1°) est-ce que le mot de passe du compte postgres de mon ordi perso sera conservé? Sinon, comment faire pour que ça le soit?
3°) est-ce qu'il est possible de faire l'opération depuis pgAdminIII (dans le menu" outils" je ne vois pas de choix du genre: restauration globale)
2°) J'aimerais ensuite automatiser l'opération de sauvegarde de donnée (ET de vaccum). Sachant que je suis ne suis pas informatien et que je suis débutant sur postgres, quels sont les outils sur lesquels je dois me documenter pour y arriver. (Avec un petite ligne d'explication sur la fonction des outils que vous proposez, s'il vous plait).

Merci d'avance!

Dernière modification par afrofip (15/12/2011 14:04:58)

Hors ligne

#14 15/12/2011 13:53:40

rjuju
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Bonjour.

1. Lorsque vous parlez du mot de passe du compte postgres de votre ordi perso, vous parlez du compte système (qui lance la base de donnée) ou du compte de connexion à la base de donnée ? les deux peuvent être différent.

3. Il est possible de le faire depuis pgAdmin uniquement pour les sauvegardes d'une base de donnée (clic droit sur la base de donnée puis restaurer). Pour les objets globaux (roles de connexion etc) il faut passer par psql.

2. Pour la maintenance quotidienne, il faut activer l'autovacuum (http://docs.postgresqlfr.org/9.1/mainte … autovacuum). Pour les sauvegardes, à moins que vous ne créiez des utilisateurs régulièrement, un pg_dump (http://docs.postgresqlfr.org/9.1/app-pgdump.html) de la base devrait suffire, sinon une 2ème sauvegarde des objets globaux pourrait s'y rajouter (http://docs.postgresqlfr.org/9.1/app-pg-dumpall.html , option -g)

Hors ligne

#15 15/12/2011 14:04:10

gleu
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Je n'ai pas jugé utile de créer une nouvelle discussion, puisse que le problème que je vai poser concerne le même projet.

Mauvais choix. Le sujet est complètement différent de l'ancien. C'est tellement global comme question que l'historique n'a pas d'intérêt pour répondre à votre question. Bref, il aurait été préférable de créer une nouvelle discussion et d'y ajouter, le cas échéant, le lien vers l'ancienne discussion. Ce n'est pas grave en soit, mais je préférais le dire.

Sinon, pour vos questions, rjuju y a déjà répondu.

Et pour info globale, il est nettement préférable d'utiliser pg_dumpall avec l'option -g pour récupérer les informations globales de PostgreSQL (utilisateurs et tablespaces), et de faire un pg_dump pour chaque base.


Guillaume.

Hors ligne

#16 15/12/2011 14:47:19

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

@gleu, bien compris (la remarque et la réponse).
@rjuju, je parle du compte de connexion à la base de donnée.
Les parties de la documentation que tu mentionne n'indiquent pas comment automatiser la sauvegarde...

Mais j'ai un problème plus grave:

Comme je l'ai dis plus haut, je sauvegarde les base de données avec la code suivant, tapé dans l'invite de commande:
pg_dumpall -h 10.242.109.25 -W -U postgres -p 5432    > D:\Sauvegarde.backup
Ensuite, je charge les bases de données sur mon ordinateur avec le code:
psql -h localhost -W -U postgres -p 5432 < D:\Sauvegarde.backup

Seulement, mais quand je vérifie ma base Postgresql, je me rendre compte qu'aucune de donnée n'a été copiée. Est-ce que les codes que j'utilise sont bons?

J'ai une question de plus. En ajoutant l'option -c dans le pg_dumpall, et en utilisant le fichier généré pour la restauration, est-ce que toutes les bases de données de mon ordinateur perso seront supprimées (y compris celle qui n'était pas présente sur le serveur dont les données ont été récupérées par le dumpall)

Dernière modification par afrofip (15/12/2011 15:46:39)

Hors ligne

#17 15/12/2011 15:48:29

rjuju
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Le compte de connexion à la base fait partie des objets globaux, qui est sauvegardé avec un pg_dumpall -g, et peut être restauré via psql.
Pour automatiser la sauvegarde, cela peut se faire via une tache planifiée sous windows, ou crontab sous linux, ou avec un outil dédié pour postgresql : pgAgent (http://www.pgadmin.org/docs/1.14/pgagent-install.html). Cet outil permet de configurer des tâches planifiée via l'interface pgAdmin et fonctionne très bien.

L'option -c de pg_dumpall ne supprimera pas les bases ou tables de la base de donnée sauvegardée d'origine, cela générera un script sql qui incluera un DROP (table, index ...) avant la création de chacun des objets, et supprimera donc les objets avant leur restauration sur le serveur cible.

Hors ligne

#18 15/12/2011 16:14:48

gleu
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Seulement, mais quand je vérifie ma base Postgresql, je me rendre compte qu'aucune de donnée n'a été copiée. Est-ce que les codes que j'utilise sont bons?

La commande psql est fausse. Comme vous n'indiquez pas dans quelle base restaurer la sauvegarde, il va essayer de se connecter à une base du même nom que l'utilisateur. Dans votre cas, l'utilisateur est postgres et il existe une base postgres. Autrement dit, vous avez tout restauré dans la base postgres. Une bonne commande psql ressemblerait plutôt à ceci :

psql -h localhost -W -U postgres -p 5432 NOMDELABASE < D:\Sauvegarde.backup


Guillaume.

Hors ligne

#19 15/12/2011 16:52:52

afrofip
Membre

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Salut
Non, rien n'a été restaurée dans la base postgres. Celle-ci affiche toujours 0 tables (je n'y ai jamais touché).
Par contre, j'ai modifié ajouté la base de donnée dans la commande psql. Mais rien n'y fait. Toujours aucune donnée ajoutée. En fait, pendant l'execution de la commande, il y a des erreurs, du genre "telle contrainte existe déjà"... Mais ça me surprend qu'il y ait des erreurs de ce genre, puisse que lors du dumpall, j'ai ajouté l'option -c. Il devrait donc suprimer la base de donnée avant de la recréer! Voici les codes mis à jour:

Sauvegarde:
pg_dumpall -h 10.242.109.25 -W -U postgres -p 5432   -c  > D:\Sauvegarde.backup

restauration:
psql -h localhost -W -U postgres -p 5432 MyDataBase < D:\Sauvegarde.backup

Hors ligne

#20 16/12/2011 01:24:16

gleu
Administrateur

Re : Transfert d'une base de donnée d'un ordinateur perso vers un serveur

Comme l'a dit rjuju plus haut, -c ne supprime pas la base de données. Il supprime chaque objet séparément. Il faudrait voir le contenu du fichier Sauvegarde.backup pour pouvoir en dire plus malheureusement.


Guillaume.

Hors ligne

Pied de page des forums