小编Tom*_*Tom的帖子

在PostgreSQL中使用pg_notify触发函数

我试图从PostgreSQL触发器函数发出通知.我可以成功使用NOTIFY命令,但我没有运气pg_notify.即使我从psql控制台调用pg_notify函数时收到通知,但在从触发器函数调用它时,我从未收到通知.

此版本的触发器功能按预期工作.我有一个听到'mymessage'的Java程序,它收到一个带有'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;
Run Code Online (Sandbox Code Playgroud)

此版本的触发器功能无法按预期工作.唯一的变化是取消注释pg_notify行并注释掉下面的NOTIFY行.(我没有修改LISTENing的Java应用程序.)我希望我的应用程序LISTENing到'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 …
Run Code Online (Sandbox Code Playgroud)

database postgresql notifications triggers plpgsql

18
推荐指数
3
解决办法
3万
查看次数

标签 统计

database ×1

notifications ×1

plpgsql ×1

postgresql ×1

triggers ×1