LISTEN — ожидание уведомления
LISTEN канал
LISTEN регистрирует текущий сеанс в качестве
слушателя канала уведомлений с именем канал.
Если текущий сеанс уже зарегистрирован в качестве слушателя
этого канала уведомлений, никаких действий не предпринимается.
При каждом вызове команды NOTIFY , выполненном в данном сеансе или в другом сеансе, подключенном к той же базе данных, все сеансы, прослушивающие этот канал уведомлений, получают уведомление, и каждый из них, в свою очередь, уведомляет свое клиентское приложение.
канал
Отменить регистрацию сеанса для определенного канала уведомлений можно с помощью команды
UNLISTEN command. Регистрации прослушивания автоматически аннулируются при завершении сеанса.
Метод, используемый клиентским приложением для обнаружения событий уведомления, зависит от того, какой Digital Q.DataBase интерфейс программирования приложений оно
использует. При использовании libpq библиотеке, приложение выполняет
LISTEN как обычную SQL-команду, а затем должно периодически вызывать функцию PQnotifies , чтобы выяснить, были ли получены какие-либо события уведомлений. Другие интерфейсы, такие как
libpgtcl предоставляют высокоуровневые методы для обработки событий уведомлений; более того,
при использовании libpgtcl разработчику приложений не следует даже выполнять
LISTEN или UNLISTEN напрямую. Для получения дополнительных сведений см. документацию по используемому интерфейсу.
каналИмя канала уведомлений (любой идентификатор).
LISTEN вступает в силу в момент фиксации (транзакции).
Если LISTEN или UNLISTEN выполняется в рамках транзакции, которая впоследствии откатывается, набор прослушиваемых каналов уведомлений не меняется.
Транзакция, в которой была выполнена команда LISTEN не может быть подготовлен для двухфазной фиксации.
При первоначальной настройке прослушивающего сеанса возникает состояние гонки:
если параллельно фиксируемые транзакции отправляют события уведомления,
какие именно из них получит новый сеанс?
Ответ таков: сеанс получит все события, зафиксированные после
определенного момента в процессе фиксации транзакции. Однако этот момент наступает несколько позже любого состояния базы данных, которое транзакция могла наблюдать в запросах. Это приводит к следующему правилу использования LISTEN: сначала выполните (и зафиксируйте!) эту команду, затем в новой транзакции проверьте состояние базы данных в соответствии с логикой приложения, после чего полагайтесь на уведомления для отслеживания последующих изменений состояния базы данных. Первые несколько полученных уведомлений могут относиться к обновлениям, уже обнаруженным при первоначальной проверке базы данных, но обычно это не имеет негативных последствий.
NOTIFY
содержит более подробное описание использования LISTEN и
NOTIFY.
Настройка и выполнение последовательности listen/notify в psql:
LISTEN virtual; NOTIFY virtual; Асинхронное уведомление «virtual» получено от серверного процесса с PID 8448.
В стандарте SQL LISTEN оператора в стандарте SQL.