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 revision使用 pgjdbc 驱动程序可序列化的事务隔离级别同时执行两次会导致错误:

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