LISTEN

Name

LISTEN -- 监听一个通知

Synopsis

LISTEN channel

描述

LISTEN注册当前会话为一个名为channel的通知通道的监听器。 若当前会话已经注册为该通知通道大一个监听器,那么什么都不做。

LISTEN将当前会话注册为通知通道命名的channel的监听器。 如果当前会话已经被注册为该通知通道的监听器,那么什么也不做

当执行了命令NOTIFY channel后,不管是此会话还是其它连接到 同一数据库的会话, 所有正在监听此通知通道的会话都将收到通知,并且接下来每个会话将通知与其相连的前端应用。

使用UNLISTEN命令可以将一个会话内已注册的通知通道删除。 同样,会话退出时自动删除该会话正在监听的已注册通知条件。

前端应用检测通知事件的方法取决于PostgreSQL应用使用的编程接口。 如果使用基本的libpq库,那么应用将LISTEN当作普通SQL命 令使用,而且必须周期地调用PQnotifies过程来检测是否有通知到达。 其它像libpgtcl接口提供了更高级的控制通知事件的方法;实际上, 使用libpgtcl的应用程序员不应该直接使用LISTENUNLISTEN。 请参考你使用的接口的文档获取更多细节。

NOTIFY的手册页包含更广泛的关于LISTENNOTIFY的使用的讨论。

参数

channel

通知通道的名字,可以是任意标识符。

Notes

LISTEN在事务提交时生效。若LISTEN或者 UNLISTEN在稍后回滚的事务中执行,被监听的同志通道的集合不会改变。

已经执行LISTEN的事务不能准备两阶段提交。

例子

psql里配制和执行一个监听/通知序列:

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

兼容性

SQL标准里没有LISTEN语句。

又见

NOTIFY, UNLISTEN