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
语句。