OLD
i NEW
mają wartość NULL lub nie są zdefiniowane w wyzwalaczu na poziomie instrukcji. Według dokumentacji:
Pogrubiony nacisk na moje.
Aż do Postgres 10 brzmi to nieco inaczej, ale z tym samym skutkiem:
Chociaż te zmienne rekordów nadal nie są przydatne w wyzwalaczach na poziomie instrukcji, bardzo nową funkcją jest:
Tabele przejść w Postgresie 10+
Postgres 10 wprowadził tabele przejść. Umożliwiają one dostęp do całego zestawu dotkniętych wierszy. Podręcznik:
Kliknij link do instrukcji, aby zobaczyć przykłady kodu.
Przykładowy wyzwalacz na poziomie instrukcji bez tabel przejść
Przed pojawieniem się tabel przejściowych były one jeszcze mniej powszechne. Przydatnym przykładem jest wysłanie powiadomień
po niektórych poleceniach DML.
Oto podstawowa wersja tego, czego używam:
-- Generic trigger function, can be used for multiple triggers:
CREATE OR REPLACE FUNCTION trg_notify_after()
RETURNS trigger
LANGUAGE plpgsql AS
$func$
BEGIN
PERFORM pg_notify(TG_TABLE_NAME, TG_OP);
RETURN NULL;
END
$func$;
-- Trigger
CREATE TRIGGER notify_after
AFTER INSERT OR UPDATE OR DELETE ON my_tbl
FOR EACH STATEMENT
EXECUTE PROCEDURE trg_notify_after();
W przypadku Postgres 11 lub nowszego użyj równoważnej, mniej mylącej składni:
...
EXECUTE FUNCTION trg_notify_after();
Zobacz: