我目前正在使用postgresql的Notify / Listen机制,并尝试将其与触发器结合使用以检测db表中的更改并将其发送给使用Java编写的外部观察程序。在我的测试中,我发现如果没有连接,通知或监听创建的通道似乎不会持续。例如,如果通知程序执行NOTIFY mymessage, 'blah-blah'
sql脚本然后关闭连接,如果没有当前侦听器侦听通道“mymessage”,则通道将被删除,这意味着有效负载'blah-blah '将会失败。
有谁知道如何配置postgresql数据库以使创建的通知通道永久化,以防止邮件丢失?或者,是否有人知道如何防止postgresql表中检测到的事件丢失?
由于
答案 0 :(得分:1)
docs州:
该通知渠道上的所有当前正在收听的会话都是 通知
(强调我的)。所以不 - 没有什么可配置的。
如果您想在某个地方保存某些消息,以便其他会话可以在以后阅读,那么您应该使用公开可读的表格,例如:(message_id bigint, message_text text)
。当然,它需要更多的一个关系,如(last_listened_message_id bigint, pid int)
,不要一次又一次地读取所有消息。
如果你想模拟频道,你应该创建更多类似的表格或者将列添加到上面的两个......