Wyzwalacze w Postgresie nie dostarczają bezpośrednio kodu wyzwalacza, ale wywołują funkcję wyzwalacza , które można wywołać z dowolnej liczby wyzwalaczy, chociaż często są one dostosowane do jednego konkretnego zdarzenia w jednej konkretnej tabeli.
Funkcja wyzwalania:
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()
-
Zrób to
AFTERwyzwalacz w celu uproszczenia. ABEFOREwyzwalacz musiałbyRETURN NEWaby aktualizacje działały, aleNEWnie jest widoczny wDELETEcyngiel. Więc potrzebujeszIF TG_OP = ...itp. -
Zawsze dostarczaj listę docelową dla utrwalonego
INSERTsprawozdania. To jest tak samo złe w wyzwalaczu Oracle. -
Prawdopodobnie masz tabelę z
serialkolumna. Tylko nie wspominaj o tym we wstawce, następny identyfikator z sekwencji jest wstawiany automatycznie.
Istnieje wiele przykładów kodu tutaj na SO.