この問題に対して他にどのような解決策がありますか?
LISTENを使用する およびNOTIFY 状況が変わったことをアプリに伝えます。
NOTIFYを送信できます キューテーブルの変更も記録するトリガーから。
LISTENを送信したPgJDBC接続が必要です 使用しているイベントの場合。定期的に空のクエリ("")を送信してデータベースをポーリングする必要があります )SSLを使用している場合。 SSLを使用していない場合は、非同期通知チェックを使用することでこれを回避できます。 Connectionのラップを解除する必要があります 接続プールのオブジェクトを使用して、基になる接続をPgConnectionにキャストできるようにします。 でlisten/notifyを使用します。関連する回答を見る
プロデューサー/コンシューマービットはより難しくなります。 PostgreSQLで複数のクラッシュセーフな同時コンシューマーを使用するには、pg_try_advisory_lock(...)でアドバイザリロックを使用する必要があります。 。同時コンシューマーが必要ない場合は簡単です。SELECT ... LIMIT 1 FOR UPDATE 一度に1行ずつ。
うまくいけば、9.4には、FOR UPDATEでロックされた行をスキップする簡単な方法が含まれるでしょう。 、開発中の作業があるため。