Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

Ticket #2 (new defect)

Opened 7 years ago

Last modified 4 years ago

PostGIS et les vues : mise à jour de la géométrie

Reported by: ThierryGonon Owned by: somebody
Priority: critical Milestone:
Component: component1 Version:
Keywords: Cc:
Start (YYYY/MM/DD): End (YYYY/MM/DD):
Completed [%]: 0

Description

Bonjour à tous,

Mon problème est le suivant : j'ai une couche vectorielle qui est en fait une vue regroupant d'une part une table contenant la géométrie et d'autre part une autre contenant les données (car les données sont gérées depuis une autre base et mises à jour régulièrement par écrasement...)
Lorsque (dans QGIS), je modifie la géométrie d'un vecteur, ça ne marche pas, me demandant de créer une règle...
Voici celle que j'ai rédigée :
CREATE RULE maj_sites AS ON UPDATE TO "vue-sites" DO INSTEAD UPDATE sites SET the_geom=NEW.the_geom;
Mon problème réside dans la rédaction de la clause WHERE...
En effet, en l'état, la règle écrase toutes les géométries en une seule...
Au cours d'une même session d'édition, il est possible (probable) que je modifie plusieurs vecteurs différents... Je ne sais pas si cela entre en compte.
Le manuel de PostgreSQL n'est pas des plus claires sur les règles... Même s'il m'a déjà permis de beaucoup avancer !!!

Merci d'avance pour votre aide

Thierry Gonon

Change History

comment:1 Changed 7 years ago by djay

Bonjour Thierry,
voilà une question bien intéressante.

Personnellement je ne pensais pas qu'il était envisageable d'éditer une vue pour ce genre de raisons.

Mais puisque cela semble possible, autant creuser une peu :)

Donc si j'ai bien compris la vue s'appelle 'vue-sites' et la table stockant les géométries s'appelle 'sites'.

Par rapport à la règle que vous avez défini, il semble en effet nécessaire d'ajouter une clause WHERE afin de s'assurer que seules les tuples (enregistrements) mis à jour sont bien ceux éditer.

Pour ce faire je pense à quelque chose comme ça :

CREATE RULE maj_sites AS ON UPDATE TO "vue-sites" DO INSTEAD UPDATE "sites" SET the_geom = NEW.the_geom WHERE OLD.id = site_id;

Alors, il faut bien noter ici que dans l'exemple de règle que je donne, il n'y a que la colonne the_geom qui est mise à jour. Je suppose aussi que dans vue-sites on a accès aux identifiants de la table sites contenant les géométries à travers la colonne : site_id.

Je pense qu'avec ce genre de règle on devrait pouvoir s'en sortir, bien entendu il sera probablement nécessaire de l'adapter à vos nom de colonnes et autres nom de tables si une quelconque erreur avait été comise ici.

En espérant que cela vous aide à résoudre votre problème.

Dans l'attente d'une réponse de votre Part.

Gérald Fenoy

Last edited 7 years ago by djay (previous) (diff)

comment:2 Changed 4 years ago by Thierry Gonon2

Bonjour Gérald, et désolé pour mon TRES long silence !!!
J'étais à l'époque au fond du désert égyptien, avec un accès parfois aléatoire au web... et le projet a connu par la suite des soucis importants, qui m'ont empêché de penser à ces petits détails techniques

La manip fonctionnait parfaitement, merci beaucoup !!!

Thierry Gonon

Note: See TracTickets for help on using tickets.