Triggers i Postgres tillhandahåller inte triggerkod direkt, utan anropar en triggerfunktion , som kan anropas från valfritt antal utlösare, även om de ofta är anpassade för en viss händelse på ett visst bord.
Triggerfunktion:
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 till en
AFTER
utlösare för att förenkla. EnBEFORE
triggern måsteRETURN NEW
för att få uppdateringar att fungera, menNEW
är inte synlig i enDELETE
utlösare. Så du skulle behövaIF TG_OP = ...
etc. -
Ange alltid en mållista för beständig
INSERT
uttalanden. Detta är lika illa i en Oracle-utlösare. -
Du har förmodligen en tabell med en
serial
kolumn. Nämn det bara inte i infogningen, nästa id från sekvensen infogas automatiskt.
Det finns många kodexempel här på SO.