LISTEN

一条指示会话监听通知的 SQL 命令

LISTEN 是一个实用程序命令,它将当前会话注册为命名通道上的侦听器。

LISTEN 一直存在于 PostgreSQL 中。

用法

命名通道必须是有效的 SQL 标识符。

一旦执行了 LISTEN,来自另一个会话的任何挂起的通知将在下次执行命令时接收。

函数 pg_listening_channels() 返回会话当前正在侦听的所有通道的列表。

执行 UNLISTEN channelname 以停止侦听命名通道。

LISTEN 和事务

LISTEN 在事务的上下文中运行,并且只有在事务提交后才会生效。如果事务回滚,则该命令将无效。

更改历史记录

示例

LISTEN 的基本用法示例

postgres=# LISTEN foo;
LISTEN

如果从另一个会话执行 NOTIFY,则将在处理下一个命令后接收通知

postgres=# CHECKPOINT;
CHECKPOINT
Asynchronous notification "foo" received from server process with PID 14161.

PostgreSQL 9.0 开始,通知可以包含可选的有效负载

postgres=# SELECT 1;
 ?column? 
----------
        1
(1 row)

Asynchronous notification "foo" with payload "bar" received from server process with PID 14161.

可能会收到多条消息

postgres=# CHECKPOINT ;
CHECKPOINT

Asynchronous notification "foo" with payload "bar" received from server process with PID 14161.
Asynchronous notification "bar" with payload "foo" received from server process with PID 14161.

使用 LISTEN 进行事务

postgres=# BEGIN;
BEGIN

postgres=*# LISTEN foo;
LISTEN

postgres=*# SELECT * FROM pg_listening_channels();
 pg_listening_channels 
-----------------------
(0 rows)

postgres=*# commit;
COMMIT

postgres=# SELECT * FROM pg_listening_channels();
 pg_listening_channels 
-----------------------
 foo
(1 row)

如果事务回滚,则会话将不会侦听命名通道(除非在事务开始之前已注册)

postgres=# SELECT * FROM pg_listening_channels();
 pg_listening_channels 
-----------------------
 foo
(1 row)

postgres=# BEGIN;
BEGIN

postgres=*# LISTEN bar;
LISTEN

postgres=*# LISTEN foo;
LISTEN

postgres=*# ROLLBACK ;
ROLLBACK

postgres=# SELECT * FROM pg_listening_channels();
 pg_listening_channels 
-----------------------
 foo
(1 row)

通道名称必须是最大 63 个 (NAMEDATALEN) 字符的有效 SQL 标识符(多余的字符将被截断)

postgres=# LISTEN 123;
ERROR:  syntax error at or near "123"
LINE 1: LISTEN 123;

postgres=# LISTEN ABCD012345678901234567890123456789012345678901234567890123456789;
NOTICE:  identifier "abcd012345678901234567890123456789012345678901234567890123456789" will be truncated to "abcd01234567890123456789012345678901234567890123456789012345678"
LISTEN
  • PostgreSQL 文档: LISTEN

分类

异步通知实用程序命令

另请参阅

UNLISTENNOTIFYpg_listening_channels()max_notify_queue_pagestrace_notify

反馈

提交任何关于 "LISTEN" 的评论、建议或更正 此处