Trigger in Postgres liefern keinen Triggercode direkt, sondern rufen eine Triggerfunktion auf , die von einer beliebigen Anzahl von Triggern aufgerufen werden können, obwohl sie oft für ein bestimmtes Ereignis in einer bestimmten Tabelle angepasst werden.
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()
-
Machen Sie es zu einem
AFTER
auslösen, um zu vereinfachen. EinBEFORE
Trigger müssteRETURN NEW
sein damit Updates funktionieren, aberNEW
ist in einemDELETE
nicht sichtbar Abzug. Sie brauchen alsoIF TG_OP = ...
usw. -
Geben Sie immer eine Zielliste für persistente
INSERT
an Aussagen. Das ist bei einem Oracle-Trigger genauso schlimm. -
Wahrscheinlich haben Sie eine Tabelle mit einer
serial
Säule. Erwähnen Sie es einfach nicht in der Einfügung, die nächste ID aus der Sequenz wird automatisch eingefügt.
Es gibt zahlreiche Codebeispiele hier auf SO.