LISTEN
LISTEN — ожидать уведомления
Синтаксис
LISTEN канал
Описание
LISTEN
регистрирует текущий сеанс для получения уведомлений через канал с заданным именем (канал
). Если текущий сеанс уже зарегистрирован и ожидает уведомлений через этот канал, ничего не происходит.
Когда вызывается команда NOTIFY
(в текущем или другом сеансе, подключённом к той же базе данных), все сеансы, ожидающие уведомления через заданный канал, получают уведомление и каждый, в свою очередь, передаёт его подключённому клиентскому приложению.канал
Сеанс может отказаться от получения уведомлений через определённый канал с помощью команды UNLISTEN
. Кроме того, подписка на любые уведомления автоматически отменяется при завершении сеанса.
Способ получения уведомлений клиентским приложением определяется программным интерфейсом PostgreSQL, который оно использует. Приложение, использующее библиотеку libpq, выполняет команду LISTEN
как обычную команду SQL, а затем оно должно периодически вызывать функцию PQnotifies
, чтобы проверить, не поступили ли новые уведомления. Другие интерфейсы, например libpgtcl, предоставляют более высокоуровневые методы для обработки событий уведомлений; на самом деле с libpgtcl разработчик приложения даже не должен непосредственно выполнять команды LISTEN
и UNLISTEN
. За дополнительными подробностями обратитесь к документации интерфейса, который вы используете.
В описании NOTIFY использование LISTEN
и NOTIFY
рассматривается более подробно.
Параметры
канал
Имя канала уведомлений (любой идентификатор).
Замечания
LISTEN
начинает действовать при фиксировании транзакции. Если LISTEN
или UNLISTEN
выполняется в транзакции, которая затем откатывается, состояние подписки этого сеанса на уведомления не меняется.
Транзакция, в которой выполняется LISTEN
, не может быть подготовлена для двухфазной фиксации.
Примеры
Демонстрация процедуры ожидания/получения уведомления в psql:
LISTEN virtual; NOTIFY virtual; Asynchronous notification "virtual" received from server process with PID 8448.
Совместимость
Оператор LISTEN
отсутствует в стандарте SQL.