Spouštěče v Postgresu neposkytují spouštěcí kód přímo, ale volají funkci spouštění , které lze volat z libovolného počtu spouštěčů, i když často jsou přizpůsobeny pro jednu konkrétní událost na jednom konkrétním stole.
Spouštěcí funkce:
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()
-
Udělejte to jako
AFTER
spoušť pro zjednodušení. ABEFORE
spouštěč by muselRETURN NEW
aby aktualizace fungovaly, aleNEW
není vidět vDELETE
spoušť. Takže budete potřebovatIF TG_OP = ...
atd. -
Vždy uveďte seznam cílů pro trvalé
INSERT
prohlášení. To je stejně špatné ve spoušti Oracle. -
Pravděpodobně máte tabulku s
serial
sloupec. Jen to nezmiňujte v insertu, další id ze sekvence se vloží automaticky.
Zde na SO je mnoho příkladů kódu.