Как передать параметры с помощью NOTIFY / pg_notify в Postgres 8.4 - PullRequest
0 голосов
/ 27 сентября 2018

Я наткнулся на pg_notify и заметил, что эта функция не существует в Postgres 8.4.

Я основываю этот вывод на двух фактах:

  1. Следующая функция вызовет любые вставки илисбой обновления:

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 документах.Однако в документах сказано:

Механизмы более высокого уровня могут быть построены с использованием таблиц в базе данных для передачи дополнительных данных (помимо простого имени уведомления) от уведомителя к слушателю (ям).

Интересно, как это достигается?Что за этим стоит глубже?Я считаю весьма полезным сообщить клиентскому приложению, какой идентификатор строки был вставлен, обновлен или удален.

...