postgres неправильно увеличивает мой идентификатор, который имеет последовательный тип данных - PullRequest
0 голосов
/ 23 апреля 2020

в моей базе данных 500 записей, и когда я удаляю id = 5, а затем пытаюсь повторно вставить ту же запись, она не обновляет последовательность правильно. Он вставляет новую запись, где id = 505, но мой самый большой идентификатор был 500. Я также обновляю последовательность до и после транзакции следующим запросом: SELECT setval (pg_get_serial_sequence ('table_name', 'id'), max (id)) FROM table_name;

Тем не менее, он увеличивает последовательность неправильно.

id Первичный ключ bigserial NOT NULL

Любая помощь приветствуется. Спасибо

1 Ответ

2 голосов
/ 23 апреля 2020

Удаление строки, для которой в качестве последовательности использовалось заполнение столбца, НЕ обновляет последовательность.

Если вам нужен порядковый номер без пробелов, вы не можете использовать последовательность.

См. https://www.postgresql.org/docs/9.5/sql-createsequence.html, которая гласит:

Потому что nextval и вызовы setval никогда не откатываются, объекты последовательности не могут быть использованы, если необходимо «пропущенное» назначение номеров последовательности. Можно создать беспрерывное назначение, используя эксклюзивную блокировку таблицы, содержащей счетчик; но это решение намного дороже, чем объекты последовательности, особенно если многим транзакциям требуются номера последовательности одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...