OLD
a NEW
jsou nulové nebo nejsou definovány ve spouštěči na úrovni příkazu. Podle dokumentace:
Odvážný důraz můj.
Až do Postgres 10 to vypadalo trochu jinak, ale se stejným efektem:
I když se tyto proměnné záznamu stále nedají použít pro spouštěče na úrovni příkazů, nová funkce zní:
Přechodové tabulky v Postgres 10+
Postgres 10 představil přechodové tabulky. Ty umožňují přístup k celé sadě ovlivněných řádků. Příručka:
Následujte odkaz na příručku pro příklady kódu.
Příklad pravidla na úrovni příkazu bez tabulek přechodů
Před příchodem přechodových tabulek to bylo ještě méně obvyklé. Užitečným příkladem je zasílání upozornění
po určitých DML příkazech.
Zde je základní verze toho, co používám:
-- 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();
Pro Postgres 11 nebo novější použijte ekvivalentní, méně matoucí syntaxi:
...
EXECUTE FUNCTION trg_notify_after();
Viz: