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, не может быть подготовлена для двухфазной фиксации.

Примеры

Настройка и выполнение последовательности listen/notify из psql:

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

Совместимость

В стандарте SQL нет оператора LISTEN.

Смотрите также

NOTIFY, UNLISTEN