Bonjour,

Je travail actuellement sur une table dans postgres qui contient plus de 66000 lignes.
Lors de la modification d'un des enregistrements, je voudrais qu'une procédure stockée se déclenche.
condition :
Si UPDATE ou INSERT de façon général :
=> insert ou update de la date de mise à jour dans le champs "date_modif" (timestamp)
SI UPDATE OU INSERT du champ "Libellé NA"
=> Mise à jour du "NAF réel" sur une requête imbriqué
SI UPDATE OU INSERT du champ the_geom
=> Mise à jour des champs "[G] Longitu" et "[G] Latitu"


si j'optimise mes procédures en 2 triggers en ajoutant la modification de date du jour , j'obtient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
BEGIN
 
IF NEW.the_geom <> OLD.the_geom THEN
        UPDATE fc2009 SET "[G] Longit"=x(the_geom),"[G] Latitu"=y(the_geom) 
        WHERE NEW.the_geom <> OLD.the_geom;
    END IF;
    NEW.date_modif := current_timestamp;
    RETURN NEW;
END;
 
CREATE TRIGGER recalcul_xy
  AFTER INSERT OR UPDATE
  ON fc2009
  FOR EACH ROW
  EXECUTE PROCEDURE update_xy();
et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
BEGIN
IF new."Libellé AP" <> old."Libellé AP" THEN
UPDATE fc2009 
        SET "NAF réel"=(SELECT naffc2009."NAF" 
        FROM naffc2009 WHERE fc2009."Libellé AP"=naffc2009."LibNAF") 
        WHERE fc2009."NAF réel" is null OR new."Libellé AP" <> old."Libellé AP";
    END IF;
    NEW.date_modif := current_timestamp;
        RETURN NEW;
END;
 
CREATE TRIGGER trig_update_naf
  AFTER INSERT OR UPDATE
  ON fc2009
  FOR EACH ROW
  EXECUTE PROCEDURE insertnaf();
Il s'avère que la modification de la date de mise à jour ne se déclenche pas..
En gros, si je mets BEFORE, il me modifie toute la table ! si je mets AFTER, il me modifie rien..
du coup je reste sur BEFORE et j'essaie de contraindre postgres à déclencher la procédure seulement sur les champs qui ont fait l'objet d'un UPDATE ou INSERT.

pour cela j'ai testé la condition WHEN ou alors FOR UPDATE mais rien n'ets concluant..

Bref si vous pouviez m'aiguiller sur la bonne démarche à suivre..
merci d'avance

ampex