我碰到了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
但是,以下函数有效,并且使用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已被插入,更新或删除非常有帮助。