SEQUENCE values (duplicated) in some corner cases when crash happens

Поиск
Список
Период
Сортировка
От Vinicius Abrahao
Тема SEQUENCE values (duplicated) in some corner cases when crash happens
Дата
Msg-id CAM9BftxUJ3bH-zywQv-4ywP7i7WTd3BCH39HHESgoCCyHmkQ_g@mail.gmail.com
обсуждение исходный текст
Ответы Re: SEQUENCE values (duplicated) in some corner cases when crashhappens
Список pgsql-hackers
Hello PG Hackers

Hope you are well and safe!

I'm opening this thread to clarify something that I can observe: duplicated values for sequences.

[My understanding is that duplication is not something we desire. In fact it does NOT happen in the majority of cases, for example, when you immediately insert the value and commit it. But it can eventually happen in some specific scenarios...describe below]

The duplication can be observed when you only makes use of "nextval" (which calls sequence.c / nextval_internal function) without - inserting it for any reason - and the database crashes.
This is reproducible using the steps described on this link:

https://gist.github.com/vinnix/2fe148e3c42e11269bac5fcc5c78a8d1


There are two variants where this is reproducible (steps on the link above):
  • Autocommit + Suspending I/O (simulating a storage issue)
  • Explicitly opening transaction + Not Suspending I/O
** To simulate the "crash" I'm running: `killall -9 postgres`.

I've being debugging sequence.c code, I can see we only want to flush the WAL segments once every 32 requests (per connection) - this is defined by SEQ_LOG_VALS. Since, these values are "persisted" in the WAL file containing the "advanced"/future values; not the current value being retrieved by nextval_internal().

What I'm trying to understand now if this is a "bug" or a "new feature"...

Kind regards,
Vini

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tomas Vondra
Дата:
Сообщение: Re: Binary search in ScalarArrayOpExpr for OR'd constant arrays
Следующее
От: Corey Huinker
Дата:
Сообщение: Re: Proposing WITH ITERATIVE