数据库 – 在PostgreSQL触发器函数中使用pg_notify

我试图从Postgresql触发器函数发出通知.我可以成功使用NOTIFY命令,但我没有运气与pg_notify.即使我从psql控制台调用pg_notify函数时收到一个通知,当从我的触发器函数调用相同的时候,我从来没有收到通知.

这个版本的触发器功能如预期的那样工作.我有一个Java程序,它被认为是’mymessage’,它收到一个通知,由“NOTIFY被解雇”的有效载荷.

-- Function: conversation_notify()

-- DROP FUNCTION conversation_notify();

CREATE OR REPLACE FUNCTION conversation_notify()
  RETURNS trigger AS
$BODY$
    BEGIN
        --SELECT pg_notify('mymessage','fired by FUNCTION');
        NOTIFY mymessage,'fired by NOTIFY';
        RETURN NULL;
    END; 
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION conversation_notify() OWNER TO postgres;

这个版本的触发器功能不能像预期的那样工作.唯一的变化是取消注释pg_notify行,并注释掉下面的NOTIFY行. (我没有修改那个LISTENING的Java应用程序).我希望我的应用程序“mymessage”应该接收到一个“FUNCTION”有效载荷的通知.实际的行为是没有收到任何东西,甚至在相应的表修改30秒之后.

-- Function: conversation_notify()

-- DROP FUNCTION conversation_notify();

CREATE OR REPLACE FUNCTION conversation_notify()
  RETURNS trigger AS
$BODY$
    BEGIN
        SELECT pg_notify('mymessage','fired by FUNCTION');
        --NOTIFY mymessage,'fired by NOTIFY';
        RETURN NULL;
    END; 
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION conversation_notify() OWNER TO postgres;

但是,我真的很困惑,因为同样的pg_notify命令可以像psql控制台一样工作!当我执行以下命令时,我的Java应用程序接收到一个通知,其中包含“由CONSOLE触发”的有效载荷:

select pg_notify('mymessage','fired by CONSOLE');

为了完整,这里是我的触发器定义:

-- Trigger: conversation_notify on ofconversation

-- DROP TRIGGER conversation_notify ON ofconversation;

CREATE TRIGGER conversation_notify
  AFTER INSERT OR UPDATE
  ON ofconversation
  FOR EACH ROW
  EXECUTE PROCEDURE conversation_notify();

我想使用pg_notify,因为我想要一个动态有效载荷.现在,这是一个假设.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...