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
AFTERspoušť pro zjednodušení. ABEFOREspouštěč by muselRETURN NEWaby aktualizace fungovaly, aleNEWnení vidět vDELETEspoušť. Takže budete potřebovatIF TG_OP = ...atd. -
Vždy uveďte seznam cílů pro trvalé
INSERTprohlášení. To je stejně špatné ve spoušti Oracle. -
Pravděpodobně máte tabulku s
serialsloupec. Jen to nezmiňujte v insertu, další id ze sekvence se vloží automaticky.
Zde na SO je mnoho příkladů kódu.