【发布时间】:2011-07-07 14:19:15
【问题描述】:
我一直在使用 PostgreSQL 的通知系统,但我终其一生都无法弄清楚为什么 pg_notify(text, text) 永远不起作用。这个特性没有过多的记录,我找不到很多在野外使用它的例子,所以我想没有人会介意我在这里问。
完全按照预期运行以下内容:
LISTEN my_channel;
NOTIFY my_channel, 'my message text';
然而,使用 pg_notify() 函数会返回一个空值,并且不会发送任何通知。也没有给出错误。使用示例如下:
SELECT pg_notify('my_channel', 'my message text');
我可以使用 NOTIFY 函数,但我的目标是将通知简化为如下查询:
select pg_notify(get_player_error_channel(username)::TEXT, 'test'::TEXT)
from player;
我想我一定错过了一些荒谬的东西,但我没有运气找出原因。可以在这里找到讨论 NOTIFY 的页面:http://www.postgresql.org/docs/9.0/static/sql-notify.html
在上面,它提到了关于 pg_notify() 的内容,这让我认为不会有太大的不同。
pg_notify 要发送通知,您还可以使用函数 pg_notify(text, text)。该函数将通道名称作为第一个参数,将有效负载作为第二个参数。如果您需要使用非常量的通道名称和有效负载,该函数比 NOTIFY 命令更易于使用。
一如既往地感谢您的帮助
编辑:数据库版本是: "PostgreSQL 9.0.3 on i686-pc-linux-gnu,由 GCC gcc (GCC) 4.2.4 编译,32 位"
【问题讨论】:
-
您使用的是哪个 postgresql 版本?选择版本()!
-
在 psql 会话中输入
LISTEN my_channel;SELECT pg_notify('my_channel', 'my message text');不会输出任何内容吗?对我来说,pg_notify 的结果伴随着“异步通知...”消息。 -
感谢 araqnid,这有助于向我保证我不会发疯!不幸的是,这也让我看起来有点愚蠢。哦,好吧。我的答案如下。
-
别心疼Abstrct,您给出的答案确实突出了对解析器工作方式的理解,而这一点并不多见。哎呀,对我来说有些新东西,也会为我解释一些非触发通知,所以答案很好。 :)
标签: database notifications postgresql