banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Tue 19 October 2010 09:23

ana-maria
Juste Inscrit !
Date d'inscription: 6 Mar 2008
Messages: 6

Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonjour,
Je poste ce message, parce que j'ai beau cherché une solution à mon problème depuis une semaine, et je ne l'ai pas trouvé. Si quelqu'un aurait une solution, je lui serais reconnaissante.
Voici mon problème. J'ai une base A de données PostGis sur un serveur Postgresql (sous Linux) et une autre base C sur un autre serveur (Linux). Je voudrais copier une table de la base A dans la base C.Pour plus d'information,  PostgreSQL est installé uniquement sous linux et j'utilise également Pgadmin 1.10 qui est installé en local.
J'ai essayé plusieurs solutions :
1. Exporter la table dans un fichier CSV et puis l'importer avec la commande Copy table from fichier.csv. Dans ce cas, j'ai eu l'erreur suivante : le fichier n'existe pas. Est-ce que c'est du au fait que le fichier est stocké en local et je veux l'importer dans ma base qui se situe sur un serveur? Si c'est le cas, quel chemin dois-je lui donner?

2. Je sais qu'il y a la commande pg-dump. Mais, je ne peux pas utiliser cette commande parce que je n'ai pas installé Postgresql en local. Comment faire pour pouvoir utiliser cette commande sans avoir installé postgresql en local?

3. J'ai essayé d'utiliser également le plugin de PGAdmin, pgsql, mais là je n'ai pas trouvé la commande pg-dump, ou une autre commande qui peut faire la même chose. Connaissez vous une commande qui fait cela?

Par ailleurs, je voudrais utiliser la commande pgsql2shp de PostGis avant de transformer une table postgis en un fichier shape. Là aussi, je ne peux pas utiliser la commande parce que je n'ai pas installé postgis. Auriez vous une idée comment le faire en passant par le serveur. Je mentionne que j'ai essayé d'installer PostgreSQL mais apparemment je n'ai pas les droit pour le faire. Puis, Postgis je ne peux pas l'installer si PostgreSQL n'est pas installé.

Je vous remercie par avance

Hors ligne

 

#2 Tue 19 October 2010 10:11

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1228
Site web

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonjour,

une connexion ssh à votre serveur linux (via putty par exemple) vous permettrait de profiter des outils installés sur le serveur.

Voir aussi la page 148/191 de cet document : http://www.davidgis.fr/documentation/old/doc-8.1.pdf

Dernière modification par Mathieu BOSSAERT (Tue 19 October 2010 10:13)


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Tue 19 October 2010 10:14

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9864
Site web

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonjour,

ana-maria a écrit:

Bonjour,
Je poste ce message, parce que j'ai beau cherché une solution à mon problème depuis une semaine, et je ne l'ai pas trouvé. Si quelqu'un aurait une solution, je lui serais reconnaissante.
Voici mon problème. J'ai une base A de données PostGis sur un serveur Postgresql (sous Linux) et une autre base C sur un autre serveur (Linux). Je voudrais copier une table de la base A dans la base C.Pour plus d'information,  PostgreSQL est installé uniquement sous linux et j'utilise également Pgadmin 1.10 qui est installé en local.
J'ai essayé plusieurs solutions :
1. Exporter la table dans un fichier CSV et puis l'importer avec la commande Copy table from fichier.csv. Dans ce cas, j'ai eu l'erreur suivante : le fichier n'existe pas. Est-ce que c'est du au fait que le fichier est stocké en local et je veux l'importer dans ma base qui se situe sur un serveur? Si c'est le cas, quel chemin dois-je lui donner?


Oui, si tu utilise COPY FROM FILE le fichier doit se trouver sur le serveur.

ana-maria a écrit:

2. Je sais qu'il y a la commande pg-dump. Mais, je ne peux pas utiliser cette commande parce que je n'ai pas installé Postgresql en local. Comment faire pour pouvoir utiliser cette commande sans avoir installé postgresql en local?


Tu ne peux pas où alors installer la partie cliente de pgsql. Sinon la lancer à partir du serveur finale pour récupérer la table sur le serveur initiale. Il faudra faire attention à l'utilisateur utilisé pour se connecter (droit, etc.)

ana-maria a écrit:

3. J'ai essayé d'utiliser également le plugin de PGAdmin, pgsql, mais là je n'ai pas trouvé la commande pg-dump, ou une autre commande qui peut faire la même chose. Connaissez vous une commande qui fait cela?


La commande dans PgAdmin est juste un wrapper graphique de pg_dump.

ana-maria a écrit:

Par ailleurs, je voudrais utiliser la commande pgsql2shp de PostGis avant de transformer une table postgis en un fichier shape. Là aussi, je ne peux pas utiliser la commande parce que je n'ai pas installé postgis. Auriez vous une idée comment le faire en passant par le serveur. Je mentionne que j'ai essayé d'installer PostgreSQL mais apparemment je n'ai pas les droit pour le faire. Puis, Postgis je ne peux pas l'installer si PostgreSQL n'est pas installé.

Je vous remercie par avance


Tu peux utiliser ogr2ogr, QGIS (interface graphique), Talend Open Studio avec le plugin spatial et certainement d'autres applications graphiques ou non.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#4 Tue 19 October 2010 11:16

ana-maria
Juste Inscrit !
Date d'inscription: 6 Mar 2008
Messages: 6

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Merci infiniment pour vos réponses si rapide

Alors, c'est OK pour les transformations postGIS-SHP, MIF, etc. Merci beaucoup.

Pour me connecter en ssh, j'ai déjà essayé mais je ne peux pas me connecter. Je crois que ce problème est du au fait que  je n'ai pas de compte utilisateur pour le serveur, juste un compte utilisateur pour la base de données. Est-ce bien cela la raison?

Hors ligne

 

#5 Tue 19 October 2010 11:23

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1228
Site web

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

ana-maria a écrit:

Pour me connecter en ssh, j'ai déjà essayé mais je ne peux pas me connecter. Je crois que ce problème est du au fait que  je n'ai pas de compte utilisateur pour le serveur, juste un compte utilisateur pour la base de données. Est-ce bien cela la raison?


En effet, sans compte sur le serveur, pas de connexion ssh.

Bonne journée,


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#6 Tue 19 October 2010 11:37

ana-maria
Juste Inscrit !
Date d'inscription: 6 Mar 2008
Messages: 6

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Yves a écrit:

"Oui, si tu utilise COPY FROM FILE le fichier doit se trouver sur le serveur."


Dans ce cas, quelle est la commande pour stocker le fichier csv sur le serveur.?Moi, j'ai utilisé l'interface de pgadmin, "exporter la sélection dans un fichier.csv". Je peux le sauvegarder qu'en local.

Yves a écrit:

"Tu ne peux pas où alors installer la partie cliente de pgsql".


quelle est la partie cliente de pgsql et comment l'installer?

Yves a écrit:

"Sinon la lancer à partir du serveur finale pour récupérer la table sur le serveur initiale. Il faudra faire attention à l'utilisateur utilisé pour se connecter (droit, etc.)".


Justement c'est comme ca que je voudrais le faire, mais je ne sais pas comment la lancer à partir du serveur. Comment arriver au serveur depuis la ligne de commande en local.


Merci beaucoup

Hors ligne

 

#7 Tue 19 October 2010 13:43

j.rolland
Participant occasionnel
Lieu: MONTPELLIER
Date d'inscription: 12 Sep 2005
Messages: 40

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonour,

voici une possibilité :

Code:

set pgpassword=????
psql -h SOURCE_HOST -p SOURCE_PORT -U SOURCE_USER -d SOURCE_DATABASE 
-c "copy (select nextval('SOURCE_SCHEMA.votretable_ogc_fid_seq'),a.champ2,a.champ3,... from SOURCE_SCHEMA.votretable ato stdout" 
| 
psql -h TARGET_HOST -p TARGET_PORT -U TARGET_USER -d TARGET_DATABASE 
-c "copy %TARGET_SCHEMA%.votretable from stdin"

J'utilise ces lignes dans un fichier batch (dans le monde windows) pour transférer des données entre Bases, je pense que cela doit être facilement portable sous Unix.


Cordialement,
Jérôme


Jérôme ROLLAND

FIT-ESIC

Hors ligne

 

#8 Tue 19 October 2010 14:58

ana-maria
Juste Inscrit !
Date d'inscription: 6 Mar 2008
Messages: 6

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonjour Jérôme,
Merci beaucoup pour votre aide. Je vais tester votre solution et je vous tiens au courant.
Cordialement,
Ana-Maria

Hors ligne

 

#9 Tue 19 October 2010 16:10

j.rolland
Participant occasionnel
Lieu: MONTPELLIER
Date d'inscription: 12 Sep 2005
Messages: 40

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonjour Ana-Maria,

oops !!
il y a une erreur dans ma ligne de commande, il faut remplacer :
from SOURCE_SCHEMA.votretable ato stdout
par
from SOURCE_SCHEMA.votretable to stdout

Cordialement,
Jérôme


Jérôme ROLLAND

FIT-ESIC

Hors ligne

 

#10 Thu 21 October 2010 13:43

Montalvillo
Participant occasionnel
Lieu: Irun
Date d'inscription: 12 Sep 2005
Messages: 36

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonjour,

Jetez un coup d'œil aux outils de Talend, et faites un retour d'expérience si ça arrange votre problème.

Cordialement,

Carlos Montalvillo

Hors ligne

 

#11 Thu 21 October 2010 16:00

vincentp
Participant actif
Lieu: Drôme
Date d'inscription: 18 Jul 2006
Messages: 128
Site web

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonjour,
Si vous avez la possibilité d'installer l'extension dblink de PostgreSQL sur le serveur B (dans les contrib, exécuter dblink.sql), alors vous pouvez utiliser ce module pour copier la table avec quelque chose du genre :

Code:

SELECT *
    FROM dblink('dbname=mydb', 'select proname, prosrc from pg_proc') AS t1(proname name, prosrc text)
    WHERE proname LIKE 'bytea%';

ou un exemple avec création de table :

Code:

CREATE TABLE mytowns as
SELECT towns.*
FROM dblink('dbname=somedb','SELECT town, pop1980, the_geom FROM towns')
    AS towns(town varchar(21), pop1980 integer, the_geom geometry);

(penser à mettre à jour la table geometry_columns après ce genre d'opération).

La doc de dblink est là : http://docs.postgresqlfr.org/9.0/CONTRIB-DBLINK.html

L'article suivant est intéressant également à ce sujet :

http://www.postgresonline.com/journal/i … rvers.html

Et un disclaimer de fin : ce module est très pratique, mais réfléchissez y à 2 fois s'il s'agit de faire autre chose que des tests. Dblink en production ajoute des contraintes et des problémes sérieux !

Bon courage
Vincent

Hors ligne

 

#12 Mon 25 October 2010 22:20

ana-maria
Juste Inscrit !
Date d'inscription: 6 Mar 2008
Messages: 6

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonsoir tout le monde,
je vous remercie pour votre aide. J'ai résolu mon problème en demandant à mon administrateur de m'installer Postgresql et postGis sur ma machine. du coup j'ai accès à toutes les commandes pgsl.

si non, avant de trouver ce moyen , je passais par qgis (accès à la base pour ouvrir une table, copie table en .shp puis sauvegarde .shp dans l'autre base Postgis - merci Yves). C'est un peu honteux mais je m'en suis sortie comme ca.

Puis j'ai testé la solution avec dblink et ca a marché. mais vu la mise en garde...je préfère  l'utiliser qu'en situation de secours.

L'outil talend, a l'aire pas mal. dès que j'ai un peu de temps, je vais le tester et je vais faire un retour.

je vous remercie beaucoup, vous êtes vraiment d'une aide précieuse.

Bien cordialement,
ana-maria

Hors ligne

 

#13 Mon 25 October 2010 22:25

ana-maria
Juste Inscrit !
Date d'inscription: 6 Mar 2008
Messages: 6

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

la solution de jérôme...je n'ai pas réussi à le faire marché. j'ai crée le fichier .bat, mais son exécution ne donne pas de résultat. Même pas d'erreur. Je n'ai pas d'idée comme résoudre ca.

Merci

Hors ligne

 

#14 Tue 26 October 2010 08:43

n314
Participant assidu
Date d'inscription: 6 Sep 2005
Messages: 699

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

a noter le numéro 131 de linux mag, affichant en une son contenu dédié à la réplication sous PG 9.0 http://ed-diamond.com/feuille_lmag131/index.html

Hors ligne

 

#15 Tue 26 October 2010 21:34

HansTrapp68
Participant occasionnel
Lieu: Lautenbach
Date d'inscription: 21 Jan 2009
Messages: 31
Site web

Re: Post-gresql : copie table base A (seveur B) dans base C (serveur D)

Bonsoir,

Si c'est une opération ponctuelle, avec pgAdmin ça le fait, mais je suis sous Windows Server 2003:
- Serveur A: clic droit sur la table et sauvegarder
- Copier le backup du serveur A vers le serveur B
- Serveur B: restaurer la table dans la nouvelle base
Il y a bien évidement des prérequis, données Postgis chargées sur la nouvelle base, droit d'accès aux répertoires, gestion des user sous Postgres du A sur le B...
Nous réalisons souvent ce genre d'opération de notre serveur de dev vers le prod sans problème majeur.
Bon courage
a+


L'intelligence artificielle n'a aucune chance face à la stupidité naturelle

Hors ligne

 

Pied de page des forums

Powered by FluxBB