Тригерите в Postgres не предоставят код на тригер директно, а извикват функция на тригер , които могат да бъдат извикани от произволен брой тригери, въпреки че често те са персонализирани за едно конкретно събитие на една конкретна таблица.
Задействаща функция:
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()
-
Направете го
AFTER
задействане за опростяване. ABEFORE
тригерът ще трябва даRETURN NEW
за да работят актуализациите, ноNEW
не се вижда вDELETE
спусък. Така че ще ви трябваIF TG_OP = ...
и т.н. -
Винаги предоставяйте целеви списък за постоянен
INSERT
изявления. Това е също толкова лошо в тригер на Oracle. -
Вероятно имате таблица с
serial
колона. Само не го споменавайте във вмъкването, следващият идентификатор от последователността се вмъква автоматично.
Има множество примери за кодове тук на SO.