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

前端之家收集整理的这篇文章主要介绍了数据库 – 在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,因为我想要一个动态有效载荷.现在,这是一个假设.

猜你在找的MsSQL相关文章