У меня есть несколько процессов, вставляемых в таблицу Postgres (10.3) с использованием уровня изоляции SERIALIZED.
Другая часть нашей системы должна прочитать эти записи и быть уверенной, что она получит все из них в последовательности.Например, на рисунке ниже, потребитель должен будет
select * from table where sequanceNum > 2309 limit 5
и затем получить порядковые номера 2310, 2311, 2312, 2313 и 2314.
Запрос на чтение использует READCOMMITTED изоляциюlevel.
Однако я вижу, что запрос на чтение получает только строки, которые я выделил желтым цветом.Глядя на xmin, я предполагаю, что транзакция 334250 началась, но не закончилась, затем транзакции 334251, 334252 и др. Начались и закончились до начала моего запроса на чтение.
У меня вопрос, как они получили последовательностьномера чередуются в 334250?Почему эти транзакции не были заблокированы в результате сериализации всех транзакций записи?
Есть какие-либо предложения о том, как добиться того, чего я хочу?Что является гарантией того, что разные транзакции не генерируют чередующиеся порядковые номера?(Это нормально, если есть пробелы .... но они не могут чередоваться).
Большое спасибо за вашу помощь.Я теряю волосы из-за этого!
PS - я только что заметил, что 334250 имеет ненулевое значение xmax.Может быть, это ключ, который я упускаю?