@MishaXXL

Как гарантировать последовательную запись данных без пропусков id?

При попытке сделать 100 записей у меня получились пропуски в id

Она начались только с id ->8 и так же иногда местами было немного пропусков
{id: 8, user_id: 1, title: "data"}
{id: 9, user_id: 1, title: " data"}
{id: 10, user_id: 1, title: "data"}


Но мне нужна таблица, где будет 100 записей c id 1 по id 100 без пропусков
Как реализовать надежную запись списка данных без пропусков значения автоинкремента id?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Таблицы на основе генераторов или sequences обычно ствавят главной задачей - обеспечить
уникальность id в первую очередь
. С эти sequence справляется.

Гарантировать блокировку или захват sequence они не могут так как Postgres создавался
как много-пользовательская БД
. Тоесть много сессий обладают правом в любой момент
взять из sequence следующее значение
. Поэтому требование хронологии - это как эксклюзивный
лок объекта. Слишком жесткое требование. И никому не нужное. Если б так БД работали то
они теряли бы в производительности и ждали-бы чтоб какая-то главная сессия отпустила таблицу.

Выход есть - брать ранг записи извне. Тоесть само приложение должно быть поставщиком
таких номеров. А БД будет просто их вставлять.

Еще вариант - в уже после загрузки обновить одно полей одной транзакцией как row_number
сортируя по любому признаку.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
Как реализовать надежную запись списка данных без пропусков значения автоинкремента id?


Никак НЕ РЕАЛИЗОВЫВАТЬ.

Оставь автоинкремент в покое - он обязан обеспечивать только уникальность, и не более. Нужна непрерывная нумерация? Создай для неё ОТДЕЛЬНОЕ поле, и нумеруй программно. Триггеры в помощь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы