Bonjour,

En dessous est le trigger sur lequel je travaille. L'objectif est à l'insertion d'une entité dans emprise de remplir certains champs de metadonnees avec les champs d'emprise (gid, date_publication, contributor, code_tranche). Ensuite de répercuter les éventuelles mises à jour dans emprise dans metadonnees et principalement le champ code_tranche.
Je rencontre le problème suivant :
Si le trigger OR UPDATE est actif alors au moment de l'insertion d'un enregistrement dans emprise, le champ contributor de metadonnees est ecrasé par la valeur current_user pour tous les enregistrements.
Si le trigger se limite à INSERT OR DELETE alors après l'insertion tout se passe bien : le champ contributor n'est pas remplacé pour tous les enregistrements (ce qui est souhaitable...)
Dans les deux cas, la mise a jour du champ contributor et code_tranche se fait bien si après l'insertion, on vient changer une valeur dans code_tranche de la table emprise.
J'en concluerai que l'UPDATE est la cause de ce dysfonctionnement mais suis incapable de trouver pourquoi.
Merci d'avance pour vos suggestions.

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-- Function: activite.tbl_emprise_metadonnees()
 
-- DROP FUNCTION activite.tbl_emprise_metadonnees();
 
CREATE OR REPLACE FUNCTION activite.tbl_emprise_metadonnees()
  RETURNS trigger AS
$BODY$
begin
 
IF (TG_OP = 'INSERT') THEN
		insert into activite.metadonnees (gid, date_publication, contributor, code_tranche)
		VALUES (new.gid, current_date, current_user, NEW.code_tranche)
		;
		return new ;
 
elseif (TG_OP = 'DELETE') THEN
	DELETE from activite.metadonnees
	where gid = old.gid ;
	return old ;
 
elsif (TG_OP = 'UPDATE') THEN 
	UPDATE activite.metadonnees 
	SET (contributor, code_tranche) = (current_user, NEW.code_tranche)
	where metadonnees.gid = new.gid
	;
	return new ;
end if ;
 
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION activite.tbl_emprise_metadonnees()
  OWNER TO "POSTGIS";
 
DROP TRIGGER trg_tbl_emprise_metadonnees ON activite.emprise;
 
CREATE TRIGGER trg_tbl_emprise_metadonnees
  AFTER INSERT OR DELETE OR UPDATE
  ON activite.emprise
  FOR EACH ROW
  EXECUTE PROCEDURE activite.tbl_emprise_metadonnees();