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é ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 11 January 2017 16:17

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

[PostGIS] Copie d'une table sur une autre base

Bonjour,

J'aimerais copier une table d'une BDD PostGIS en local à une autre sur un serveur à distance.
En cherchant sur le forum, j'ai commencé à tester plusieurs propositions, notamment celle provenant de ce post : http://georezo.net/forum/viewtopic.php?id=80074

Celle proposée par Yves en #2 (sous pgAdmin faire un sauvegarde/restaurer) fonctionne en partie seulement.
Ma table étant assez lourde (plus d'1.6 millions de lignes), la copie n'est pas intégrale.

Quant à la proposition de Nicolas Ribot en #3 ...

Code:

pgdump -t table1 database1 | psql -h serveur2 -d database2

... je n'arrive pas à écrire cette commande correctement.
Est-ce que quelqu'un peut m'aiguiller ?

J'ai également vu certains post parlant de l'extension dblink.
Comment cela fonctionne ?

Je précise que je n'ai pas besoin que les modifications apportées sur la table originelle se répercutent sur la nouvelle.
Donc je ne pense pas avoir besoin de mettre en place un trigger

Merci par avance smile

Hors ligne

 

#2 Wed 11 January 2017 19:12

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,

Celle proposée par Yves en #2 (sous pgAdmin faire un sauvegarde/restaurer) fonctionne en partie seulement.
Ma table étant assez lourde (plus d'1.6 millions de lignes), la copie n'est pas intégrale.


Je ne pense pas que le volume de ta table en soit la cause. As-tu interrompu le traitement ? Quel est la sortie renvoyée par pgAdmin ?

Quant à la proposition de Nicolas Ribot en #3 ...

Code:

pgdump -t table1 database1 | psql -h serveur2 -d database2

... je n'arrive pas à écrire cette commande correctement.
Est-ce que quelqu'un peut m'aiguiller ?


Que renvoie ta commande ?
Pour ton pg_dump (et non pas pgdump, au passage ^^), il manque peut-être des options, notamment si ta table se trouve dans un schéma particulier (option "-n").
Voir la doc de pg_dump adaptée à ta version de PostgreSQL.

Idem pour psql, la commande nécessite peut-être d'autres options, notamment si ton accès à la BDD cible nécessite une authentification (options "-U" et "-W"). Voir la doc de psql.

Si ça ne fonctionne pas mieux, voici d'autres causes susceptibles d'empêcher la migration :
- As-tu les droits d'accès sur le serveur cible depuis la machine source ? (voir également le paramétrage du fichier pg_hba.conf sur le serveur cible)
- Ton utilisateur PostgreSQL a-t-il les droits d'écriture sur le schéma cible ?
- Le serveur cible a-t-il bien la même version de PostGIS ? ("SELECT postgis_version()" pour en être sûr)


Vianney Dugrain

Hors ligne

 

#3 Thu 12 January 2017 11:16

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour Vianney et merci beaucoup pour ta réponse.

VianneyD a écrit:

Je ne pense pas que le volume de ta table en soit la cause. As-tu interrompu le traitement ? Quel est la sortie renvoyée par pgAdmin ?


Je n'ai pas interrompu le traitement, et le code de sortie retournée est bien 0. Pourtant quand je compte le nombre de ligne entre ma table sauvegardé et ma table restauré, il y a des différences.

si ça ne fonctionne pas mieux, voici d'autres causes susceptibles d'empêcher la migration :
- As-tu les droits d'accès sur le serveur cible depuis la machine source ? (voir également le paramétrage du fichier pg_hba.conf sur le serveur cible)
- Ton utilisateur PostgreSQL a-t-il les droits d'écriture sur le schéma cible ?
- Le serveur cible a-t-il bien la même version de PostGIS ? ("SELECT postgis_version()" pour en être sûr)


Alors :
- oui, j'ai les droits d'accès au serveur, je peux y accéder par le bureau à distance et j'y ai directement installé postgresql.
- oui, j'ai les droits d'écriture, je suis le superutilisateur.
- oui, j'ai bien la même version de postgres (9.5) ET de PostGIS (2.3) entre le serveur et mon ordinateur.

Concernant la commande, je lance le SQL Shell, puis voilà ce que tape :

Code:

Server [localhost]: pg_dump -t ma_table -n mon_schéma
ma_base | psql -h nom_hôte -d ma_base2 -U nom_superutilisateur -W motdepasse

Cela me retourne la demande Database [postgres] : -> je retape ma_base
Cela me retourne Port [5433] : -> je tape Entrée (C'est le port en local)
Cela me retourne Username [postgres] : -> je tape postgres

Et là, rien, la fenêtre se ferme toute seule, j'ai juste eu le temps de lire ".... psql n'a pas pu ....."
Merci par avance pour votre aide -_-

Hors ligne

 

#4 Thu 12 January 2017 11:39

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Si tu as un pgadmin cela s'effectue simplement clic droit sauvegarder sous smile


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#5 Thu 12 January 2017 11:53

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour heretik25,

C'est la 1èere solution que j'ai testé.
Mais je ne sais pas pourquoi le processus de sauvegarde/restauration ne fonctionne pas correctement.
D’où le test des autres solutions ....

Dernière modification par Xavier Julian (Thu 12 January 2017 11:53)

Hors ligne

 

#6 Thu 12 January 2017 12:04

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,

Je n'ai pas interrompu le traitement, et le code de sortie retournée est bien 0. Pourtant quand je compte le nombre de ligne entre ma table sauvegardé et ma table restauré, il y a des différences.


As-tu fait un "SELECT count(*) FROM [table]" de part et d'autre ? Car le nombre de lignes estimées donné par pgAdmin n'est pas forcément exact...


Vianney Dugrain

Hors ligne

 

#7 Thu 12 January 2017 12:29

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: [PostGIS] Copie d'une table sur une autre base

VianneyD a écrit:

Bonjour,

Je n'ai pas interrompu le traitement, et le code de sortie retournée est bien 0. Pourtant quand je compte le nombre de ligne entre ma table sauvegardé et ma table restauré, il y a des différences.


As-tu fait un "SELECT count(*) FROM [table]" de part et d'autre ? Car le nombre de lignes estimées donné par pgAdmin n'est pas forcément exact...


je confirme que l'estimation faite par pgadmin est souvent assez fantaisiste


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#8 Thu 12 January 2017 15:43

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

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,

Concernant la commande, je lance le SQL Shell, puis voilà ce que tape :
Code:

Server [localhost]: pg_dump -t ma_table -n mon_schéma
ma_base | psql -h nom_hôte -d ma_base2 -U nom_superutilisateur -W motdepasse


Sauf que la commande pg_dump est une commande dos et pas SQL, il faut lancer pg_dump dans la console DOS. Donc j'en déduis que tu es sous Windows, donc que ca sera quelque chose comme :

Code:

C:\Program Files\PostgreSQL\9.5\bin\pg_dump.exe -t ma_table -n mon_schéma ma_base | psql -h nom_hôte -d ma_base2 -U nom_superutilisateur -W motdepasse

à partir de la console dos que tu peux ouvrir par : Menu Démarrer > Executer > cmd

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

 

#9 Thu 12 January 2017 16:37

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour Yves.

Alors effectivement, je suis sous Windows.
Je vous joins la commande que je lance, mais qui me renvoi le chemin d'accès spécifié est introuvable

Je ne me suis jamais servi de la commande dos, désolé :-/


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#10 Thu 12 January 2017 17:20

Dof
Participant assidu
Lieu: Grenoble
Date d'inscription: 28 Oct 2009
Messages: 317
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,
Est-ce le bon chemin de "pg_dump.exe"?
Sinon, essayez de mettre les chemins entre guillemets

Hors ligne

 

#11 Thu 12 January 2017 17:27

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,

Comme l'a indiqué Yves, ce n'est pas

C:\Programmes\Post....


mais

si version 64 bits ou windows 32 bits

"C:\Program Files\Postgresql\9.5\bin\"pg_dump


ou si version 32 bits (sous windows 64 bits)

"C:\Program Files (x86)\Postgresqll\9.5\bin\"pg_dump


NB: les guillemets sont nécessaires

le mieux serait d'ajouter le chemin à la variable PATH

Code:

set PATH="C:\Program Files\Postgresql\9.5\bin\";%PATH%

ce qui permettrait de localiser également psql

Le dossier Programmes affiché dans les fenêtres est renommé à l'affichage par Windows

Dernière modification par jmarsac (Thu 12 January 2017 17:30)


Jean-Marie
Azimut

Hors ligne

 

#12 Fri 13 January 2017 08:39

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,

Il existe aussi l’extension dblink().

non ?

Dernière modification par ChristopheV (Fri 13 January 2017 08:40)


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#13 Fri 13 January 2017 10:51

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour ChristopheV,

ChristopheV a écrit:

Bonjour,

Il existe aussi l’extension dblink().

non ?


Oui j'avais lu plusieurs sujets du forum parlant de dblink.
Apparemment il est désormais conseillé d'utiliser plutôt postgres_fdw, ce que je teste en ce moment même.
Avez-vous utilisé l'une ou l'autre de ces extensions avec succès?

J'essaye également de modifier ma commande DOS grâce aux remarques de Dof et jmarsac.

Hors ligne

 

#14 Fri 13 January 2017 11:25

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Alors je progresse au sujet de la commande DOS...
Désormais j'ai une erreur "could not find a "psql" to execute".
Pourtant psql.exe est bien dans le même répertoire que pg_dump.exe.
Voilà mon code :

Code:

set PATH="C:\Program Files\Postgresql\9.5\bin\";%PATH% pg_dump -t matable -n monshema mabase | psql -h monhote -d matable2

Dernière modification par Xavier Julian (Fri 13 January 2017 11:25)

Hors ligne

 

#15 Fri 13 January 2017 11:35

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Il faut taper deux commandes successives :

Code:

set PATH="C:\Program Files\Postgresql\9.5\bin\";%PATH%

 pg_dump -t matable -n monshema mabase | psql -h monhote -d matable2

et peut-être ajouter le ".exe" :

Code:

 pg_dump.exe -t matable -n monshema mabase | psql.exe -h monhote -d matable2

Jean-Marie
Azimut

Hors ligne

 

#16 Fri 13 January 2017 11:47

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Au temps pour moi, il ne faut pas mettre les guillemets lorsqu'on redéfinit la variable PATH (Ils sont requis seulement si l'on donne le chemin complet au lancement de la commande.
Il s'agit bien d'un Windows 32 bits ou d'un PostgreSQL 64 bits sur Windows 64 bits ?

Code:

set PATH=C:\Program Files\Postgresql\9.5\bin\;%PATH%

Jean-Marie
Azimut

Hors ligne

 

#17 Fri 13 January 2017 12:08

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Il s'agit d'un PostgreSQL 64 bits sur Windows 64 bits.

J'ai donc enlevé les guillemets de la variable PATH, et cette fois-ci la commande se lance, mais me demande un mot de passe.
J'ai d'abord essayé le mdp de mon serveur à distance, puis de mon serveur en local, mais ça ne marche pas.

J'ai l'erreur : pg_dump : [programme d'archivage (db)] la connexion à la base de données "x.julian" a échoué.
Mais je comprends pas pourquoi x.julian, c'est le nom de ma session Windows ?

Décidément cette commande DOS ça me perd... ><
Je ne dois pas être le seul cartographe à penser qu'il devrait y avoir un moyen plus ergonomique et "user friendly" pour administrer les bases de données?
Merci vraiment de votre aide.

Hors ligne

 

#18 Fri 13 January 2017 12:32

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Il faut créer et renseigner le fichier %APPDATA%\x.julian\pgpass.conf (corriger le numéro de port si nécessaire)

avec

Code:

localhost:5432:mabase:postgres:password
monhote:5432:mabasedistante:postgres:passworddistant

"passworddistant" est le mot de passe de l'utilisateur "postgres" sur monhote (serveur distant)

Puis il faut indiquer le nom d'utilisateur PostgreSQL pour la connexion et indiquer de ne pas saisir le mot de passe :

Code:

pg_dump.exe -U postgres -w -t matable -n monshema mabase | psql.exe -U postgres -w -h monhote -d mabasedistante

NB: l'option -d (de psql) introduit le nom de la base et non celui de la table

Plus d'infos dans la doc :

https://www.postgresql.org/docs/9.5/sta … -psql.html
https://www.postgresql.org/docs/9.5/sta … gdump.html
https://www.postgresql.org/docs/9.5/sta … gpass.html

Dernière modification par jmarsac (Fri 13 January 2017 13:25)


Jean-Marie
Azimut

Hors ligne

 

#19 Fri 13 January 2017 14:09

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

On avance, on avance et merci !

J'avais déjà configuré le fichier pgpass.conf lorsque j'avais installé postresql sur le serveur distant.

Donc j'ai bien rajouté les -U et -w dans la commande pour préciser le nom utilisateur et mdp.
Cette fois-ci on touche au but, car l'erreur renvoyé c'est "pg_dump : aucune table correspondante n'a été trouvé".
Pourtant (je ne suis pas fou^^) la table existe bien (écrite en minuscule), dans le bon schéma.

Hors ligne

 

#20 Fri 13 January 2017 15:35

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,

Pour dumper une table, c'est l'option -t (ex: -t monschema.matable)
l'option -n, c'est pour dumper un schéma entier.

Donc là, vous avez sûrement copié le schéma entier sur le serveur cible.

Nicolas

Hors ligne

 

#21 Fri 13 January 2017 16:15

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Merci Nicolas,

Effectivement, ça aide. J'ai ENFIN réussi à faire la copie d'une table test vide.
Voilà le code pour info (et pour les suivants) :

Code:

set PATH=C:\Program Files\PostgreSQL\9.5\bin\;%PATH%

pg_dump -U postgres -w -t monschema.matable mabase | psql -h monhote -U postgres -w -d mabase2

Après ça se corse avec mes vraies tables, il y a des erreurs refus pour créer pg_catalog.matable, mes relations qui n'existent pas, etc.
Je vais continuer de fouiller dans les options décrites dans la doc officielle.

Dernière modification par Xavier Julian (Fri 13 January 2017 16:37)

Hors ligne

 

#22 Fri 13 January 2017 16:35

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostGIS] Copie d'une table sur une autre base

au cas où... ce n'est pas -d monschema2 mais -d mabase2

Code:

pg_dump -U postgres -w -t monschema.matable mabase | psql -h monhote -U postgres -w -d mabase2

Jean-Marie
Azimut

Hors ligne

 

#23 Fri 13 January 2017 16:37

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Ha oui zut, moi qui voulait réécrire le code proprement (je l'ai modifié du coup dans le post précédant) !
merci !

Dernière modification par Xavier Julian (Fri 13 January 2017 16:37)

Hors ligne

 

#24 Fri 13 January 2017 16:41

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [PostGIS] Copie d'une table sur une autre base

"refus pour créer pg_catalog.matable"

ca, c'est parce que la table existe déja dans le serveur et que vous ne précisez pas l'option -c (clean: drop des tables existantes avant copie)

deux options: soit supprimer la table dans le serveur cible et relancer votre commande
soit relancer la commande avec l'option -c

Nico

Hors ligne

 

#25 Fri 13 January 2017 17:07

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

Ha ... pourtant ma "base2" est vide...
Bon j'ai aussi des erreurs de syntaxe, de commande \N invalide, etc.

Hors ligne

 

#26 Fri 13 January 2017 17:21

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: [PostGIS] Copie d'une table sur une autre base

c'est la premiere erreur qui est importante. Les \n viennent apres la premiere erreur en general.

Hors ligne

 

#27 Mon 16 January 2017 15:45

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: [PostGIS] Copie d'une table sur une autre base

Bonjour,

Avez-vous utilisé l'une ou l'autre de ces extensions avec succès?


DBLink oui sans soucis, le seul truc un peu tricky c'est de compléter tous les paramètres de la commande (host,pwd,etc ...).


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#28 Tue 17 January 2017 10:31

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: [PostGIS] Copie d'une table sur une autre base

J'ai trouvé la source de l'erreur "refus pour créer pg_catalog.matable".
En fait il faut que dans ma bdd de réception mabase2 (sur le serveur à distance), il faut qu'il y ait le même nom de schéma que dans ma bdd en local mabase.
J'ai trouvé cette astuce sur http://forums.postgresql.fr/viewtopic.php?id=2963

Je pensais que, par défaut, la table que je cherchais à sauvegarder allait se créer dans le schéma "public" de mabase2 ....

Un grand merci à tous pour votre précieuse aide.

Hors ligne

 

Pied de page des forums

Powered by FluxBB