非同期通知を利用するために、postgresql jdbc ドライバーを pgjdbc から pgjdbc-ng に交換しました。トランザクション分離レベルをシリアライズすると、動作が異なります。
クエリを実行: insert into "_revision"(revision, timestamp) select coalesce(max(revision), 0)+1, transaction_timestamp() at time zone 'utc' from "_revision" returning revision
pgjdbc ドライバーでシリアル化可能なトランザクション分離レベルで同時に 2 回実行すると、次のエラーが発生します。
ERROR: could not serialize access due to read/write dependencies among transactions
DETAIL: Reason code: Canceled on identification as a pivot, during write.
HINT: The transaction might succeed if retried.
pgjdbc-ng ドライバーと同じ場合、エラーが発生します。
ERROR: duplicate key value violates unique constraint "_revision_pkey"
DETAIL: Key (revision)=(2) already exists.
hikari 接続プールを正しいデータソースでセットアップする以外は、実行コードを変更していません。似たようなことを経験した人はいますか、または pgjdbc-ng シナリオでシリアライゼーションが失敗しない理由を知っていますか?