Triggers in Postgres leveren niet direct triggercode, maar roepen een triggerfunctie aan , die kan worden aangeroepen vanaf een willekeurig aantal triggers, hoewel ze vaak zijn aangepast voor een bepaalde gebeurtenis op een bepaalde tafel.
Trigger-functie:
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()
-
Maak er een
AFTER
van trigger om te vereenvoudigen. EenBEFORE
trigger zou moetenRETURN NEW
om updates te laten werken, maarNEW
is niet zichtbaar in eenDELETE
trekker. Je hebt dusIF TG_OP = ...
. nodig enz. -
Geef altijd een doellijst op voor persistente
INSERT
verklaringen. Dit is net zo erg in een Oracle-trigger. -
Je hebt waarschijnlijk een tabel met een
serial
kolom. Vermeld het alleen niet in de bijlage, de volgende id uit de reeks wordt automatisch ingevoegd.
Er zijn talloze codevoorbeelden hier op SO.