UNLISTEN は既存の NOTIFY による登録を削除することに使用されます。 UNLISTEN は現在の Postgres セッショ ンにある、通知条件 notifyname 用のリ スナ登録を全て取り消します。ワイルドカード "*" は特別な条件 を示すもので、現在のセッションにある全てのリスナ登録を取り 消します。
NOTIFY には、LISTEN と NOTIFY についての、より広範な説明があります。
classname は有効な クラス名である必要はありませんが、その文字列長には 32 文字までと いう制限があります。 (訳注: classname は notifyname の間違いだと思われます。)
監視をしていないものに対して UNLISTEN を行なったとしても、バック エンドは警告を行ないません。 各バックエンドはその終了時に自動的に UNLISTEN * を実行します。
Postgres の以前のリリースにあった、 実際のテーブルに対応していない classname は二重 引用符で括らなければならないという制限はもうありません。 (訳注: classname はnotifyname の間違いだと思われます。なお、 libpq.sgml によると、一般的には notifiyname には関連する classname が使用されるようです。)
次の既存の登録に対して実行してみます。
postgres=> LISTEN virtual; LISTEN postgres=> NOTIFY virtual; NOTIFY Asynchronous NOTIFY 'virtual' from backend with pid '8448' received
一度 UNLISTEN コマンドが実行されると、それ以降の NOTIFY コマ ンドは無視されます。
postgres=> UNLISTEN virtual; UNLISTEN postgres=> NOTIFY virtual; NOTIFY -- NOTIFY イベントを受け取らなかった点に注目して下さい。