Triggere i Postgres giver ikke triggerkode direkte, men kalder en triggerfunktion , som kan kaldes fra et vilkårligt antal triggere, selvom de ofte er tilpasset til en bestemt begivenhed på et bestemt bord.
Udløserfunktion:
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()
-
Gør det til en
AFTER
trigger for at forenkle. EnBEFORE
trigger skalRETURN NEW
for at få opdateringer til at virke, menNEW
er ikke synlig i enDELETE
udløser. Så du skal brugeIF TG_OP = ...
osv. -
Angiv altid en målliste for vedvarende
INSERT
udsagn. Dette er lige så slemt i en Oracle-trigger. -
Du har sandsynligvis en tabel med en
serial
kolonne. Du skal bare ikke nævne det i indsættelsen, det næste id fra sekvensen indsættes automatisk.
Der er adskillige kodeeksempler her på SO.