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 Tue 08 January 2013 14:21

mcdelay
Participant occasionnel
Lieu: Lille
Date d'inscription: 19 Sep 2005
Messages: 25

Probleme de mise à jour avec un trigger sur une base postGIS

Bonjour,

J'essaye de mettre à jour deux colonnes d'une table par l'intermédiaire de trigger  mais je rencontre un souci avec la mise à jour des colonnes quand un objet graphique est crée. Voici le trigger :

Code:

DECLARE
   flag VARCHAR(32);
   
BEGIN


IF(TG_OP='INSERT') THEN
    -- INSERT INTO public.fon_parcelle_transaction_cavm (ogc_fid,the_geom) VALUES (NEW."ROWID",NEW."g");
    UPDATE cav_postgis.sb_data_309 SET superficie = area(NEW.g) WHERE rowid=NEW.rowid;
    UPDATE cav_postgis.sb_data_309 SET commune = public.cad_commune.commune 
    FROM public.cad_commune
    WHERE (ST_IsValid(NEW.g) 
    AND st_within(ST_PointOnSurface(NEW.g),public.cad_commune.the_geom)) 
    AND rowid = NEW.rowid; 
END IF;

IF(TG_OP='UPDATE') THEN 
    UPDATE cav_postgis.sb_data_309 SET superficie = area(NEW.g) WHERE rowid=NEW.rowid;
    UPDATE cav_postgis.sb_data_309 SET commune = public.cad_commune.commune 
    FROM public.cad_commune
    WHERE (ST_IsValid(NEW.g) 
    AND st_within(ST_PointOnSurface(NEW.g),public.cad_commune.the_geom)) 
    AND rowid = NEW.rowid; 

END IF; 

SET dynmap_pgconf.state_trigger_beetween_schemas='';

RETURN NEW;

END;

Lors de la mise à jour de l'objet graphique les colonnes "superficie" et "commune" se mettent bien à jour. Par contre c'est lors de l'insertion d'un objet que les colonnes ne se mettent pas à jour. Je pense que je ne maitrise pas trop le comportement de la fonction lors de l'insertion d'un objet.  Je souhaite , quand l'objet est créé, mettre à jour les colonnes, j'ai pour cela créé un trigger qui se déclenche après la création de l'objet (AFTER) où les évènements suivants insert update delete sont permis et qui utilise la fonction ci dessus.

Merci pour votre aide !

SD

Hors ligne

 

#2 Tue 08 January 2013 16:22

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Probleme de mise à jour avec un trigger sur une base postGIS

Bonjour,

De ce que je comprends, un AFTER trigger ne permet pas de faire de la mise a jour de données insérées: l'insertion a deja eu lieu.
Il faut declarer le trigger comme BEFORE.

Nicolas

Hors ligne

 

#3 Tue 08 January 2013 17:16

mcdelay
Participant occasionnel
Lieu: Lille
Date d'inscription: 19 Sep 2005
Messages: 25

Re: Probleme de mise à jour avec un trigger sur une base postGIS

Merci beaucoup pour la réponse. Bon, j'avais déjà essayé un before mais ça n'avait pas fonctionné ...

Hors ligne

 

Pied de page des forums

Powered by FluxBB