INSERT INTO исключение столбца ID нарушает ограничение уникальности первичного ключа - PullRequest
0 голосов
/ 15 января 2020

У меня есть таблица Postgres 10.6 со столбцом serial ID.

Когда я пытаюсь вставить в нее:

INSERT INTO table (col1, col2) VALUES ('foo', 'bar');

исключая столбец ID из списка столбцов , Я получаю:

ERROR: duplicate key value violates unique constraint "customer_invoice_pkey"
  Detail: Key (id)=(1234) already exists.

Последующие запуски запроса увеличивают ID в сообщении об ошибке (1235, 1236 и т. c.)

Как это может происходить?

1 Ответ

1 голос
/ 15 января 2020

Наличие столбца serial не препятствует вставке строк с явным значением для id. Значение последовательности является только значением по умолчанию, которое используется, когда id не указано в операторе INSERT.

Так что, должно быть, были некоторые "мошеннические" вставки такого рода. Начиная с PostgreSQL v11, вы можете использовать столбцы идентификаторов (GENERATED ALWAYS AS IDENTITY), чтобы сделать переопределение значения последовательности более сложным.

Вы можете использовать функцию setval, чтобы установить для последовательности значение, превышающее максимальное id в таблице, чтобы обойти проблему.

...