Les déclencheurs dans Postgres ne fournissent pas de code de déclencheur directement, mais appellent une fonction de déclencheur , qui peuvent être appelés à partir de n'importe quel nombre de déclencheurs, bien qu'ils soient souvent personnalisés pour un événement particulier sur une table particulière.
Fonction déclencheur :
CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
RETURNS trigger AS
$func$
BEGIN
INSERT INTO some_tbl(key, name, describe) -- or some_other_tbl?
VALUES (OLD.key, OLD.name, OLD.describe);
RETURN OLD;
END
$func$ LANGUAGE plpgsql
CREATE TRIGGER foo -- not: "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
-
Faites-en un
AFTER
déclencheur pour simplifier. UnBEFORE
le déclencheur devraitRETURN NEW
pour que les mises à jour fonctionnent, maisNEW
n'est pas visible dans unDELETE
gâchette. Vous auriez donc besoin deIF TG_OP = ...
etc. -
Fournissez toujours une liste cible pour
INSERT
persistant déclarations. C'est tout aussi mauvais dans un déclencheur Oracle. -
Vous avez probablement une table avec un
serial
colonne. Ne le mentionnez pas dans l'insert, l'identifiant suivant de la séquence est inséré automatiquement.
Il existe de nombreux exemples de code ici sur SO.