Тригерите в 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.