On this page
LISTEN
LISTEN —收听通知
Synopsis
LISTEN channel
Description
LISTEN在名为* channel *的通知通道上将当前会话注册为侦听器。如果当前会话已被注册为该通知通道的侦听器,则不执行任何操作。
每当此会话或连接到同一数据库的另一个会话调用命令NOTIFY channel时,都会通知当前正在该通知通道上监听的所有会话,并且每个会话将依次通知其连接的 Client 端应用程序。
可以使用UNLISTEN命令为给定的通知通道注销会话。会话结束时,会话的监听注册会自动清除。
Client 端应用程序检测通知事件所必须使用的方法取决于其使用的 PostgreSQL 应用程序编程接口。使用 libpq 库,应用程序将LISTEN作为普通的 SQL 命令发出,然后必须定期调用函数PQnotifies来确定是否已接收到任何通知事件。其他接口(例如 libpgtcl)提供了用于处理通知事件的更高级方法。实际上,使用 libpgtcl,应用程序程序员甚至不应直接发出LISTEN或UNLISTEN。有关更多详细信息,请参见所用接口的文档。
NOTIFY包含有关LISTEN和NOTIFY用法的更广泛讨论。
Parameters
channel- 通知 Channel 的名称(任何标识符)。
Notes
LISTEN在事务提交时生效。如果在稍后回滚的事务中执行LISTEN或UNLISTEN,则正在侦听的通知通道集将保持不变。
已执行LISTEN的事务无法准备进行两阶段提交。
Examples
从 psql 配置并执行侦听/通知序列:
LISTEN virtual;
NOTIFY virtual;
Asynchronous notification "virtual" received from server process with PID 8448.
Compatibility
SQL 标准中没有LISTEN语句。