#java #pgjdbc-ng
Вопрос:
Я поменял драйвер jdbc postgresql с 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 не приводит к сбою сериализации?