如何在Postgres 8.4中使用NOTIFY / pg_notify传递参数

时间:2018-09-27 09:12:43

标签: postgresql-8.4

我碰到了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

  1. 文档仅在9.0及更高版本中没有在https://www.postgresql.org/docs/8.4/static/sql-notify.html中提及pg_notify。

但是,以下函数有效,并且使用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文档中也没有提及。 然而,文档却这样说:

  

可以通过使用数据库中的表将其他数据(不仅仅是通知名)从通知程序传递到侦听器来构建高级机制。

我想知道这是如何实现的?这背后的更深层含义是什么?  我发现通知我的客户端应用程序哪些行ID已被插入,更新或删除非常有帮助。

0 个答案:

没有答案