PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# LISTEN

## 名称

LISTEN -- 监听一个通知

## 大纲

    LISTEN channel

## 描述

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

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

使用`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

上一页 | 起始页 | 下一页
INSERT | 上一级 | LOAD