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.
Совместимость
Оператор LISTEN отсутствует в стандарте SQL.