Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 Fri 22 February 2019 08:39

EmilieCCBE
Participant actif
Date d'inscription: 22 Nov 2018
Messages: 80

[Shp2Pgsql] Passer un password dans la commande

Bonjour,

je souhaite utiliser shp2pgsql pour charger des shape ne lot dans postgis. J'ai crée un script qui génère les commandes nécessaires pour l'ensemble des shape se trouvant dans un dossier. Cependant je ne parviens pas à passer le mot de passe d'accès à ma base dans la commande. Mon code est le suivant :

Code:

shp2pgsql -D -s 3945 -I -W LATIN1 C:\Users\lechemin\vers\monshape.shp bdd_integration_temporaire.matable | psql -d bac_sable -U postgres

Lorsque j'éxacute ce code directement dans la console,  le prompt me demande mon mot de passe. Et tout s'éxecute parfaitement. Lorsque je passe cette commande via un script python avec le code suivant  :

Code:

command = shp2pgsql -D -s 3945 -I -W LATIN1 C:\Users\lechemin\vers\monshape.shp bdd_integration_temporaire.matable | psql -d bac_sable -U postgres
os.system(command)

le code semble s'exécuter normalement mais aucune donnée ne s'écrit, et pour cause, normalement le script ne permet pas d'accéder à la base. 

J'ai essayé de m'appuyer sur ce post : https://gis.stackexchange.com/questions … ing-centos et d'ajouter la commande PGPASSWORD = monpassword mais la commande n'est pas reconnue. 

Avez vous des pistes quant au paramètre à utiliser pour indiquer le mot de passe à shp2pgsql?

Merci par avance pour vos réponses.
Belle journée.

Emilie

Hors ligne

 

#2 Fri 22 February 2019 12:07

Blaise Picinbono
Participant actif
Date d'inscription: 8 Jan 2015
Messages: 70
Site web

Re: [Shp2Pgsql] Passer un password dans la commande

Bonjour;

Dans votre script Python, vous mettez bien la définition de votre variable "command" entre double guillemêts, n'est-ce pas ?:

Code:

command = "shp2pgsql -D -s 3945 -I -W LATIN1 C:\Users\lechemin\vers\monshape.shp bdd_integration_temporaire.matable | psql -d bac_sable -U postgres"

Il y a plusieurs façons d'établir une connexion psql dans un script sans avoir à fournir un mot de passe. L'une d'elle est l'utilisation d'un fichier .pgpass.

Si vous utilisez un système linux, créer ce fichier .pgpass à la racine du répertoire de l'utilisateur avec lequel le script Python est lancé, par exemple /home/emilie/
Dans ce fichier /home/emilie/.pgpass, mettez une ligne avec ces paramètres:
hostname:port:database:username:password
comme indiqué dans cette doc: https://www.postgresql.org/docs/9.3/libpq-pgpass.html
Ne pas oublier de faire un chmod 600 sur ce fichier

Code:

$ chmod 600 /home/emilie/.pgpass

Ensuite, dans le script Python, je pense (mais pas certain) qu'il faut bien spécifier, l'hôte, le port, la base de données et l'utilisateur, ainsi votre commande serait:

Code:

command = "shp2pgsql -D -s 3945 -I -W LATIN1 C:\Users\lechemin\vers\monshape.shp bdd_integration_temporaire.matable | psql -h nomdelhote -p 5432 -d bac_sable -U postgres""

(en supposant que le serveur postgresql est bien sur le port 5432, celui par défaut).

Cette solution doit fonctionner avec Windows également, voir la doc pour le répertoire du fichier .pgpass.

Si ça ne fonctionne toujours pas, qu'y a-t-il d'écrit dans les logs de postgresql lorsque le script tourne ?

Dernière modification par Blaise Picinbono (Fri 22 February 2019 12:09)

Hors ligne

 

#3 Mon 25 February 2019 10:07

EmilieCCBE
Participant actif
Date d'inscription: 22 Nov 2018
Messages: 80

Re: [Shp2Pgsql] Passer un password dans la commande

Bonjour,

merci pour les conseils.
Je suis sous windows. D'après la documentation postgres, sous windows, le fichier a créée est pgpass.conf que j'ai stocké dans le dossier User/appdata/postgres. J'ai créée une variable d'environnement PGPASSFILE avec le chemin complet du fichier dans mes variables d'environnement.
Ensuite pour test, j'ai relancé la commande suivante dans mon cmd  :

Code:

shp2pgsql -D -s 3945 -I -W LATIN1 C:\mon\chemin\vers\monshape.shp bdd_integration_temporaire.matable | psql -h monhote -d mabasededonnee -U admin_bdd

Le prompt ne me demande plus de mot de passe par contre il me renvoie que l'authentification a échouée. J'en déduis qu'il doit détecter qu'il y a un fichier de type pgpass mais qu'il ne parvient pas pour autant à effectuer la connexion. J'ai vérifier les paramètres indiqués dans mon fichier. A priori, tout est bon. J'ai construit le fichier pgpass.conf comme suit :

Code:

mon.hote:5432:ma_base:admin_bdd:mon_password

Cela pourrait il venir des droits d'accès définit côté serveur dans le fichier  pg_hba.conf ?

Merci par avance pour vos réponses.

Belle journée.
Emilie.

Hors ligne

 

#4 Mon 25 February 2019 14:00

Blaise Picinbono
Participant actif
Date d'inscription: 8 Jan 2015
Messages: 70
Site web

Re: [Shp2Pgsql] Passer un password dans la commande

Bonjour;

Vous devez spécifier le port de postgresql dans votre commande:

Code:

shp2pgsql -D -s 3945 -I -W LATIN1 C:\mon\chemin\vers\monshape.shp bdd_integration_temporaire.matable | psql -h monhote -p 5432 -d mabasededonnee -U admin_bdd

(en suposant que votre serveur postgresql est bien sur le port 5432)

Dans le fichier de configuration pg_hba.conf, la méthode d'authentification doit être "md5".

Hors ligne

 

#5 Mon 25 February 2019 14:26

EmilieCCBE
Participant actif
Date d'inscription: 22 Nov 2018
Messages: 80

Re: [Shp2Pgsql] Passer un password dans la commande

Merci.

Lorsque j'indique le port, la commande fonctionne sans avoir besoin d'indiquer le mot de passe dans le prompt. Ce qui est déjà un très très bon point.
Cependant, la commande ne fonctionne pas lorsque je l'envoie via mon script Python (après avoir mis la commande entre double quote). Le script se déroule bien . Le process semble se terminé sans problème. Mais la table voulue n'est pas crée en base de données. Je vais donc aller consulter les log postgres pour essayer de détecter la source du problème.

Bonne après midi.

Emilie.

Hors ligne

 

Pied de page des forums

Powered by FluxBB