Я наткнулся на pg_notify и заметил, что эта функция не существует в Postgres 8.4.
Я основываю этот вывод на двух фактах:
- Следующая функция вызовет любые вставки илисбой обновления:
CREATE OR REPLACE FUNCTION PUBLIC.NOTIFY() RETURNS trigger AS
$BODY$
BEGIN
PERFORM pg_notify('myEvent', NEW.id::text);
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100;
С ошибкой, такой как: ERROR: function pg_notify(unknown, text) does not exist
Документация просто не упоминает pg_notify в
https://www.postgresql.org/docs/8.4/static/sql-notify.html, только в 9.0 и выше.
Однако следующая функция работает и использует ключевое слово NOTIFY вместо вызова функции:
CREATE OR REPLACE FUNCTION PUBLIC.NOTIFY() RETURNS trigger AS
$BODY$
BEGIN
NOTIFY myEvent;
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100;
В документах 9.x также упоминается передача параметров, подобных этому NOTIFY channel [ , payload ]
, что опять же не упоминается в 8.4 документах.Однако в документах сказано:
Механизмы более высокого уровня могут быть построены с использованием таблиц в базе данных для передачи дополнительных данных (помимо простого имени уведомления) от уведомителя к слушателю (ям).
Интересно, как это достигается?Что за этим стоит глубже?Я считаю весьма полезным сообщить клиентскому приложению, какой идентификатор строки был вставлен, обновлен или удален.