🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# LISTEN ## Name LISTEN -- 监听一个通知 ## Synopsis ``` LISTEN _channel_ ``` ## 描述 `LISTEN`将当前会话注册为通知通道`_channel_`的监听器。 如果当前会话已经被注册为该通知通道的监听器,那么什么也不做。 当执行了命令`NOTIFY` `_channel_` 后,不管是此会话还是其它连接到同一数据库的会话,所有正在监听此通知通道的会话都将收到通知, 并且接下来每个会话将通知与其相连的前端应用。 使用`UNLISTEN`命令可以将一个会话内已注册的通知通道删除。同样, 会话退出时自动删除该会话正在监听的已注册通知通道。 前端应用检测通知事件的方法取决于PostgreSQL应用使用的编程接口。 如果使用基本的libpq库,那么应用将`LISTEN`当作普通 SQL 命令使用, 而且必须周期地调用`PQnotifies`过程来检测是否有通知到达。 其它像libpgtcl接口提供了更高级的控制通知事件的方法;实际上, 使用libpgtcl的应用程序员不应该直接使用`LISTEN`或`UNLISTEN`。 请参考你使用的接口的文档获取更多细节。 [NOTIFY](#calibre_link-982)的手册页包含更广泛的关于`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](#calibre_link-982), [UNLISTEN](#calibre_link-975)