微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库 – 在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,因为我想要一个动态有效载荷.现在,这是一个假设.

原文地址:https://www.jb51.cc/mssql/82369.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐