Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 16/10/2015 21:35:21
- gbodet
- Membre
Règles sur vue : pb de modifications de valeurs via une vue
Bonjour,
Depuis 1 semaine, j'ai des problèmes de modifications de données via une vue et la définition de règles.
J'ai 2 tables, une contenant la géométrie et l'autre les attributs. Chacune possède un identifiant idgeo en integer.
J'ai une vue qui permet de rassembler les valeurs des 2 tables
CREATE OR REPLACE VIEW m_amenagement.geo_v_site_ope AS
SELECT row_number() OVER () AS gid, o.idgeo, so.l_nom, so.dest, so.date_crea,
so.z_proced, o.ref_spa, so.date_sai AS date_sai_att,
so.date_maj AS date_maj_att, o.date_sai AS date_sai_obj,
o.date_maj AS date_maj_obj, so.op_sai AS op_sai_att, o.op_sai AS op_sai_obj,
o.surf_brt, o.geom
FROM m_amenagement.an_amt_site_ope so, r_objet.geo_objet_peri_ope o
WHERE so.idgeo = o.idgeo;
Sur cette vue, j'y intègre une règle de modification
CREATE OR REPLACE RULE metier_modif_site_ope AS
ON UPDATE TO m_amenagement.geo_v_site_ope
DO INSTEAD UPDATE m_amenagement.an_amt_site_ope SET
idgeo = new.idgeo,
l_nom= new.l_nom,
dest = new.dest,
date_crea = new.date_crea,
date_maj = now(),
op_sai = new.op_sai_obj
WHERE an_amt_site_ope.idgeo = new.idgeo;
Pour faire mes insertions et modifications, j'utilise QGIS 2.4 sur une base Postgres 9.0.
Après saisie, j'obtiens 3 valeurs dans me table attributaire
idgeo date_crea
100 2012
200 2015
300 2016
Si je modifie dans QGIS via ma vue la date 2015 pour idgeo=100, il l'enregistre dans l'idgeo = 300.
Quelles solutions ou quels problèmes peuvent être la cause de ce phénomène ?
Faut-il obligatoire que l'identifiant unique idgeo soit une séquence ?
Merci pour vos réponses, je galère.
Cordialement
Hors ligne
#2 16/10/2015 22:37:43
- gbodet
- Membre
Re : Règles sur vue : pb de modifications de valeurs via une vue
Re-
J'apporte des éléments de réponses.
En passant par un idgeo avec une séquence, le pb a priori disparaît.
Mais j'avais également une vue appelant 3 tables, et là les modifications posaient également pb avec ma règle. En ne gardant que 2 tables, le pb disparait.
Bizarre quand même. Je suis preneur de toutes informations pouvant m'aider à mieux comprendre.
Merci
Hors ligne
#3 17/10/2015 08:44:03
- Marc Cousin
- Membre
Re : Règles sur vue : pb de modifications de valeurs via une vue
J'imagine que la rule devrait utiliser comme clause where an_amt_site_ope.idgeo = old.idgeo , et non pas new.idgeo . Pas sûr que ça soit la cause du problème, mais déjà, cela me semble faux.
Sinon, vous feriez mieux de faire un trigger «INSTEAD OF» qu'une rule. Les rules sont vraiment piégeuses, et régulièrement, les développeurs PostgreSQL cherchent des solutions pour s'en débarrasser (sans succès, pour le moment, malheureusement).
Marc.
Hors ligne
#4 17/10/2015 21:03:36
- gbodet
- Membre
Re : Règles sur vue : pb de modifications de valeurs via une vue
Bonsoir,
OK merci, je suis en cours de développement en ce moment, et j'ai opté pour le maximum de trigger pour tout ce qui est modification de données liées à la géométrie.
Je suis resté sur le système de règles pour la simple modification d'attributs liés à une vue contenant ma géométrie. J'ai développé des triggers pour la modification attributaire des tables de niveaux supérieurs suites à la modif de la table appelée par cette vue.
J'ai également introduit pour la clé primaire idgeo une séquence commune.
Depuis cela semble bien fonctionné.
Je note votre remarque sur les règles qui me rassure quand à mes soucis antérieurs.
Merci
Hors ligne