========
UNLISTEN
========


.. container:: refentry
   :name: SQL-UNLISTEN

   .. container:: titlepage

   .. container:: refnamediv

      .. rubric:: UNLISTEN
         :name: unlisten

      UNLISTEN — 停止监听一个通知

   .. container:: refsynopsisdiv

      .. rubric:: 大纲
         :name: 大纲

      .. code:: synopsis

         UNLISTEN { channel | * }

   .. container:: refsect1
      :name: id-1.9.3.181.5

      .. rubric:: 描述
         :name: 描述

      ``UNLISTEN``\ 被用来移除一个已经存在的对 ``NOTIFY``\ 事件的注册。
      ``UNLISTEN``\ 取消任何已经存在的把当前 PostgreSQL会话作为名为
      *``channel``*\ 的通知
      频道的监听者的注册。特殊的通配符\ ``*``\ 取消当前会话
      的所有监听者注册。

      `NOTIFY <sql-notify.html>`__\ 包含有关\ ``LISTEN``
      和\ ``NOTIFY``\ 使用的更深入讨论。

   .. container:: refsect1
      :name: id-1.9.3.181.6

      .. rubric:: 参数
         :name: 参数

      .. container:: variablelist

         *``channel``*
            一个通知频道的名称(任何标识符)。

         ``*``
            所有用于这个会话的当前监听注册都会被清除。

   .. container:: refsect1
      :name: id-1.9.3.181.7

      .. rubric:: 注解
         :name: 注解

      你可以 unlisten 你没有监听的东西,不会出现警告或者错误。

      在每一个会话末尾,会自动执行\ ``UNLISTEN *``\ 。

      一个已经执行了\ ``UNLISTEN``\ 的事务不能为 两阶段提交做准备。

   .. container:: refsect1
      :name: id-1.9.3.181.8

      .. rubric:: 示例
         :name: 示例

      做一次注册:

      .. code:: programlisting

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

      一旦执行了\ ``UNLISTEN``\ ,进一步的\ ``NOTIFY`` 消息将被忽略:

      .. code:: programlisting

         UNLISTEN virtual;
         NOTIFY virtual;
         -- no NOTIFY event is received

   .. container:: refsect1
      :name: id-1.9.3.181.9

      .. rubric:: 兼容性
         :name: 兼容性

      SQL 标准中没有\ ``UNLISTEN``\ 命令。

   .. container:: refsect1
      :name: id-1.9.3.181.10

      .. rubric:: 另见
         :name: 另见

      `LISTEN <sql-listen.html>`__, `NOTIFY <sql-notify.html>`__