0

非同期通知を利用するために、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 revisionpgjdbc ドライバーでシリアル化可能なトランザクション分離レベルで同時に 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 シナリオでシリアライゼーションが失敗しない理由を知っていますか?

4

0 に答える 0