2017-01-16 9 views
0

私は現在、postgresqlのNotify/Listenメカニズムを使用していて、dbテーブルの変更を検出してJavaで書かれた外部ウォッチャーに送信するためにトリガと組み合わせてみます。私のテストでは、通知または聴取のいずれかによって作成されたチャンネルは、それに接続されていなければ持続しないようです。たとえば、通知者がNOTIFY mymessage, 'blah-blah' SQLスクリプトを実行して接続を終了し、現在のリスナーがチャネル「mymessage」をリッスンしていない場合、チャネルは削除されます。つまり、ペイロード「blah-blah」が失われます。postgresql通知チャネル

メッセージが失われないように、作成された通知チャネルを永続化するようにpostgresqlデータベースを設定する方法を知っている人はいますか?または、postgresqlテーブルの検出されたイベントが失われないようにする方法を知っている人はいますか?

おかげ

+0

もしかして?.. –

答えて

1

docs状態:

が現在その通知チャネル上を聞いて、すべてのセッションが(強調鉱山)

を 通知されます。そうではありません。構成するものは何もありません。

他のセッションが後でそれを読むことができるようにメッセージをどこかに保存したい場合は、公に読めるテーブル、例えば:(message_id bigint, message_text text)を使用する必要があります。もちろん、(last_listened_message_id bigint, pid int)のようにもう1つの関係が必要な場合は、すべてのメッセージを一度、もう一度読み取らないようにしてください。何をすべきか - 「失われPostgreSQLのテーブルで検出されたイベントを防ぐために、どのように」

そして、あなたがチャンネルをモックアップしたい場合は、より多くの同様のテーブルを作成するか、または上記2に列を追加する必要がありますどちらか...

関連する問題