LISTEN

监听通知。

概要

LISTEN <channel>

描述

LISTEN 将当前会话注册为名为 channel 的通知通道的监听器。如果当前会话已注册为该通知通道的监听器,则不执行任何操作。

每当调用命令 NOTIFY <通道> 时(无论由当前会话还是连接至同一数据库的其他会话发起),所有当前监听该通知通道的会话都会收到通知,每个会话随后将通知其连接的客户端应用程序。

可通过 UNLISTEN 命令取消会话对特定通知通道的订阅。当会话结束时,其监听注册将自动清除。

客户端应用程序检测通知事件的方法取决于其使用的PostgreSQL应用程序接口。使用libpq库时,应用程序需将LISTEN作为普通SQL命令执行,随后必须定期调用PQnotifies()函数以获取是否接收到通知事件。其他接口(如libpgtcl)提供了更高层次的通知事件处理方法;实际上,使用libpgtcl时应用程序开发者甚至不应直接执行LISTEN或UNLISTEN命令。更多细节请参阅所用接口的文档说明。

NOTIFY 对 LISTEN 和 NOTIFY 的用法进行了更深入的讨论。

参数

  • channel
    • 通知通道的名称(任意标识符)。

注意

LISTEN 在事务提交时生效。若在事务内执行 LISTEN 或 UNLISTEN 操作,而后该事务被回滚,则监听的通知通道集保持不变。

已执行LISTEN的交易无法为两阶段提交做准备。

示例

从 psql 配置并执行监听/通知序列:

LISTEN virtual;
NOTIFY virtual;
Asynchronous notification "virtual" received from server process with PID 8448.

兼容性

SQL标准中不存在LISTEN语句。

另见

NOTIFY, UNLISTEN