LISTEN — Attendre une notification
LISTEN canal
LISTEN enregistre la session courante comme
listener du canal de notification canal.
Si la session courante est déjà enregistrée comme listener de ce canal de notification,
il ne se passe rien de plus.
À chaque appel de la commande
NOTIFY ,
que ce soit par cette session ou par une autre connectée à la même base de données, toutes les
sessions attendant sur ce canal en sont avisées
et chacune en avise en retour son client. Voir canalNOTIFY pour plus d'informations.
La commande UNLISTEN permet d'annuler l'enregistrement d'une session comme
listener d'un canal de notification. Les enregistrements d'écoute d'une
session sont automatiquement effacés lorsque la session se termine.
La méthode utilisé par un client pour détecter les
événements de notification dépend de l'interface de programmation
PostgreSQL qu'il utilise. Avec la bibliothèque
libpq, l'application exécute LISTEN comme
une commande SQL ordinaire, puis appelle périodiquement la fonction
PQnotifies pour savoir si un événement de
notification est reçu. Les autres interfaces, telle
libpgtcl, fournissent des méthodes de plus haut niveau pour
gérer les événements de notification ; en fait, avec
libpgtcl, le développeur de l'application n'a même pas à
lancer LISTEN ou UNLISTEN directement.
Tous les détails se trouvent dans la documentation de l'interface utilisée.
NOTIFY décrit
plus en détails l'utilisation de LISTEN et
NOTIFY.
canalLe nom d'un canal de notification (tout identifiant).
LISTEN prend effet à la validation de la transaction. Si
LISTEN ou UNLISTEN est exécuté dans
une transaction qui sera ensuite annulée, l'ensemble des canaux de
notification écoutés sera inchangé.
Une transaction qui a exécuté LISTEN ne peut pas être
préparée pour la validation en deux phases.
Configurer et exécuter une séquence listen/notify à partir de psql :
LISTEN virtual; NOTIFY virtual; Notification asynchrone "virtual" reçue en provenance du processus serveur de PID 8448.
Il n'existe pas d'instruction LISTEN dans le standard SQL.