des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

Postgres не обновил sequence при вставке с PK?

Почему при вставке с указанным первичным ключом sequence не возрос на единицу?
  • Вопрос задан
  • 625 просмотров
Решения вопроса 1
@miksir
IT
В отличии от мускуля, где автоинкремент встроен в потроха на уровне движка, сиквенс - это просто некий отдельно лежащий счетчик

Для того, что бы он работал как автоинкремент - нужно каждый раз получать значение конкретного счетчика, делается это путем назначения default значения на первичный ключ таблицы в виде вызова функции nextval.
id integer NOT NULL DEFAULT nextval('"some_id_seq"'::regclass)

default значение отрабатывает только если это поле не было передано во вставке или было передано со значением default.

Т.е., если вы вставляете в таблицу в явным указанием id - default не выполняется, сиквенс не меняется. Так что в этом случае нужно явно проставить значение счетчика через setval
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Потому что не был вызван nextval. За ненадобностью.
Раз не нужно было генерировать новое значение, то зачем его дёргать зря?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы