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
AFTERutlösare för att förenkla. EnBEFOREtriggern måsteRETURN NEWför att få uppdateringar att fungera, menNEWär inte synlig i enDELETEutlösare. Så du skulle behövaIF TG_OP = ...etc. -
Ange alltid en mållista för beständig
INSERTuttalanden. Detta är lika illa i en Oracle-utlösare. -
Du har förmodligen en tabell med en
serialkolumn. Nämn det bara inte i infogningen, nästa id från sekvensen infogas automatiskt.
Det finns många kodexempel här på SO.