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
AFTERvan trigger om te vereenvoudigen. EenBEFOREtrigger zou moetenRETURN NEWom updates te laten werken, maarNEWis niet zichtbaar in eenDELETEtrekker. Je hebt dusIF TG_OP = .... nodig enz. -
Geef altijd een doellijst op voor persistente
INSERTverklaringen. Dit is net zo erg in een Oracle-trigger. -
Je hebt waarschijnlijk een tabel met een
serialkolom. Vermeld het alleen niet in de bijlage, de volgende id uit de reeks wordt automatisch ingevoegd.
Er zijn talloze codevoorbeelden hier op SO.