PostgreSQL NOTIFY 队列在 LISTEN 后为空

PostgreSQL NOTIFY queue empty after LISTEN

我是 PostgreSQL LISTEN/NOTIFY 功能的新手。 LISTEN命令后,

LISTEN mychannel;

我们可以NOTIFY向频道发消息。

NOTIFY mychannel 'Hello';
  1. NOTIFY 消息保存在数据库中的某处。在哪里?我可以使用来自 table 的 select 查询查看消息吗?

  2. 如果我 NOTIFY 3 或 5 条消息,这些消息将保存在队列中。我使用编程语言 运行 LISTEN 命令,处理所有消息并从队列中删除消息。如果我的客户端崩溃,所有消息都将丢失。我该如何解决这个问题?

恐怕你误会了LISTEN。它用于 active 会话之间的异步通信。消息未存储在任何地方。

如果您想要一个持久的 dara 结构用于应用程序的两个部分之间的通信,您可能正在寻找一个 队列

众所周知,队列很难在关系数据库中实现,我建议您使用 PostgreSQL 的现有第三方实现之一。

LISTEN / NOTIFY 可以成为此类队列实现的一部分,从而使收件人无需定期轮询队列。