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

Printemps des cartes 2024

#1 Mon 28 January 2019 14:19

yougono
Juste Inscrit !
Date d'inscription: 3 May 2013
Messages: 3

QGIS: utilisation des notifications postgresql(trigger)

Bonjour à tous,

Je suis nouveau sur le forum de Georezo. Actuellement en formation avec l'organisme IDGEO, j'effectue un stage au sein du Conservatoire d'espaces naturels du Languedoc Roussillon (CEN). Je me permets de contacter la communauté au sujet des notifications de PostgreSql dans Qgis. 

Nous avons créé un trigger sur la base de données du CEN permettant de réaliser des vues à partir de la modification de la géométrie d'une couche.
Ce trigger permet d'automatiser la création de vues et de faire remonter directement tout un ensemble d'informations pour les utilisateurs de la couche donnée.

L'idée est de faire en sorte que lorsqu'un utilisateur met à jour ou crée de nouvelles entités sur la couche rattachée au trigger, une notification Qgis apparaisse et indique que des vues concernant la zone étudiée ont été créées dans la base de donnée et sont désormais consultables. 

Oslandia a travaillé sur la question des notifications de mise à jour dans la base de données. L'exemple ci-dessous indique comment rafraîchir l'affichage dans Qgis lors d'une modification dans PostgreSql. La commande NOTIFY de Postgresql semble être utilisée dans le trigger.

https://oslandia.com/en/2017/10/07/refr … ostgresql/

Est-ce que quelqu'un aurait eu l'occasion de travailler sur un projet similaire permettant de faire interagir facilement les modifications de la base avec l'interface de Qgis ?
Comment faire en sorte que Qgis détecte la mise à jour dans la base de données Postgre et indique à l'utilisateur que des vues ont été crées ?
Comment détecter une notification envoyée par Postgres et déclencher l'affichage de la vue créée dans Qgis ?

Merci d'avance pour les éventuelles pistes,

Hors ligne

 

#2 Mon 28 January 2019 14:57

haubourg
Participant assidu
Lieu: Grenoble
Date d'inscription: 7 Sep 2005
Messages: 257
Site web

Re: QGIS: utilisation des notifications postgresql(trigger)

Bonjour,
je suis forcé de répondre là smile

Il y a deux endroits dans l'interface où les notify sont exposés à QGIS, mais il est possible d'écouter ces signaux depuis du code python aussi.

Nous avons rajouté le rafraîchissement des couches effectivement dans les propriétés de rendu des couches.
Cela a donné des idées à la communauté qui a ensuite suggéré de pouvoir déclencher des actions de couche sur des signaux Notify.

Théoriquement, il est donc possible de déclencher du code python depuis ces actions de couche sur réception d'un signal, en spécifiant le message (payload) porté par le canal QGIS du notify. Je n'ai pas essayé, mais si vous faites fonctionner ça, je suis preneur du retour pour le rajouter en action par défaut comme exemple pour les suivants.

Hors ligne

 

#3 Mon 28 January 2019 15:33

yougono
Juste Inscrit !
Date d'inscription: 3 May 2013
Messages: 3

Re: QGIS: utilisation des notifications postgresql(trigger)

Bonjour,

Merci beaucoup pour votre réponse.

Je comprends du coup que vous avez essentiellement interfacé le rafraichissement des couches dans Qgis et que cette possibilité peut s'élargir à d'autres applications, moyennant un peu de programmation.

Je n'ai, malheureusement, pas de connaissances en langage Python ou équivalents. Si jamais vous avez des pistes de code python pouvant s'apparenter à ce genre de traitement, je reste preneur.

Je continue à chercher,

Merci

Hors ligne

 

#4 Thu 07 February 2019 10:57

yougono
Juste Inscrit !
Date d'inscription: 3 May 2013
Messages: 3

Re: QGIS: utilisation des notifications postgresql(trigger)

Bonjour,

Je me permets de relancer le sujet. Mes essais n'ont pas été concluants jusque là.

J'ai édité une action Python sur ma couche reliée au trigger dans Qgis et reprenant le script suivant :

python
print('[% @notification_message %]')

Du côté du trigger et de sa fonction j'ai utilisé l'opérateur NOTIFY avec le message (payload) "mise à jour".
Cela donne: 

BEGIN

............ écriture de la requête ...............

NOTIFY qgis,''mise à jour''';

END IF;
RETURN NEW;
END; $report_f$ LANGUAGE plpgsql;


La modification de la table fonctionne et les vues sont créées ou rafraîchies à chaque mise à jour. Je ne parviens toutefois pas à obtenir le message de notification (payload) dans Qgis devant indiquer à l'utilisateur que des vues ont été créées et qu'il peut les consulter.

L'écriture de l'action Python est-elle correcte ? L'utilisation de NOTIFY peut-elle être aussi simple que dans mon exemple ?

Merci

Hors ligne

 

#5 Tue 12 February 2019 15:15

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

Re: QGIS: utilisation des notifications postgresql(trigger)

haubourg a écrit:

Nous avons rajouté le rafraîchissement des couches effectivement dans les propriétés de rendu des couches.
Cela a donné des idées à la communauté qui a ensuite suggéré de pouvoir déclencher des actions de couche sur des signaux Notify.


Bonjour Régis,

nous ne sommes pas parvenus à faire fonctionner le "simple" rafraîchissement des couches. On a peut-être loupé quelque chose mais on bloque.
Je m'y recollerai à tête reposée avant d'aller plus loin, mais c'est une fonctionnalité très intéressante et pleine d'applications.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB