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
AFTERtrigger for at forenkle. EnBEFOREtrigger skalRETURN NEWfor at få opdateringer til at virke, menNEWer ikke synlig i enDELETEudløser. Så du skal brugeIF TG_OP = ...osv. -
Angiv altid en målliste for vedvarende
INSERTudsagn. Dette er lige så slemt i en Oracle-trigger. -
Du har sandsynligvis en tabel med en
serialkolonne. 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.