Ticket #2 (new defect)
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:2 Changed 10 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
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 :
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