LISTENは現在のセッションを、通知チャネルchannelのリスナとして登録します。 現在のセッションが既に指定した通知チャネルのリスナとして登録されている場合は、何も起こりません。
このセッションまたは同一データベースに接続している別のセッションによってNOTIFY channelが実行されると、現在その通知チャネルを監視している全てのセッションに対して通知されます。 次に、各セッションは接続中のクライアントアプリケーションにこれを通知します。
UNLISTENコマンドを使って、セッションに登録された指定通知チャネルを解除できます。 また、セッションの監視登録はそのセッションが終了した時点で自動的に削除されます。
クライアントアプリケーションが通知イベントを検出する方法は、使用しているPostgreSQLアプリケーションプログラミングインタフェースに依存します。
libpqライブラリを使用するアプリケーションでは、LISTENを通常のSQLコマンドとして発行し、その後、PQnotifies
ルーチンを定期的に呼び出して通知イベントが受信されたかどうかを調べる必要があります。
libpgtcl等の他のインタフェースには、通知イベントを扱うより高レベルな方法が用意されています。
実際、libpgtclを使ったアプリケーションの場合、プログラマがLISTENやUNLISTENを直接発行する必要すらありません。
詳細については、使用中のインタフェースのドキュメントを参照してください。
NOTIFYには、LISTENおよびNOTIFYについてのより広範な説明があります。
LISTENはトランザクションのコミット時に有効になります。 LISTENまたはUNLISTENがトランザクション内で実行され、それがロールバックされた場合、監視している通知チャネルの集合は変更されません。
LISTENを実行したトランザクションでは二相コミットの準備を行うことはできません。