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
AFTERdéclencheur pour simplifier. UnBEFOREle déclencheur devraitRETURN NEWpour que les mises à jour fonctionnent, maisNEWn'est pas visible dans unDELETEgâchette. Vous auriez donc besoin deIF TG_OP = ...etc. -
Fournissez toujours une liste cible pour
INSERTpersistant déclarations. C'est tout aussi mauvais dans un déclencheur Oracle. -
Vous avez probablement une table avec un
serialcolonne. 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.