OLD
и NEW
са нулеви или не са дефинирани в тригер на ниво оператор. Съгласно документацията:
Удебелен акцент е мой.
До Postgres 10 това се четеше малко по-различно, но почти със същия ефект:
Въпреки че тези променливи на запис все още не са от полза за задействания на ниво израз, нова функция е:
Таблици за преход в Postgres 10+
Postgres 10 въведе таблици за преход. Те позволяват достъп до целия набор от засегнати редове. Ръководството:
Следвайте връзката към ръководството за примерни кодове.
Примерен тригер на ниво оператор без таблици за преход
Преди появата на преходните таблици те бяха още по-рядко срещани. Полезен пример е да изпратите известия
след определени DML команди.
Ето основна версия на това, което използвам:
-- 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();
За Postgres 11 или по-нова версия използвайте еквивалентния, по-малко объркващ синтаксис:
...
EXECUTE FUNCTION trg_notify_after();
Вижте: