【JPUG主催】PostgreSQLカンファレンス2020【11月13日開催】
他のバージョンの文書 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

3.6. 非同期通知

PostgreSQL は、LISTENNOTIFY コマンドを使用した、非同期通知をサポートします。バックエンドは、LISTEN コマンドを使用して、対象とする通知条件を登録します。特定条件を監視中のバックエンドは、他のバックエンドによって、その条件名に対して NOTIFY コマンドが実行された場合、通知を非同期に受信します。他の情報は通知元から監視先へ渡されません。従って、通常は通信させる必要がある実際のデータは、リレーションを介して転送されます。

libpq++ アプリケーションは、接続中のバックエンドが非同期通知を受信した時に常に、通知を受けます。しかし、バックエンドからフロントエンドへの通信は非同期ではありません。libpq++ アプリケーションは、バックエンドをポーリングして、処理待ちの通知情報があるかどうかを確認する必要があります。コマンドを実行した後、フロントエンドは PgDatabase::Notifies を呼び出して、現在バックエンドからの通知データがあるかどうかを確認することができます。 PgDatabase::Notifies はバックエンドにある未処理の通知のリスト内の通知を返します。バックエンドに未処理の通知が存在しなかった場合、この関数は NULL を返します。PgDatabase::Notifies はスタックのポップ処理のような動作を行います。 PgDatabase::Notifies で返された通知は、処理されたものとみなされ、通知のリストから削除されます。

2 番目のサンプルプログラムにて、非同期通知の使用例を示します。