Проблема:
При вставке строки в таблицу (пусть она называется "mytable"), использующую поле типа "serial" (пусть оно называется "id", а соответствующий ему ключ - "id_pkey") в качестве первичного ключа, появляется ошибка:
При вставке строки в таблицу (пусть она называется "mytable"), использующую поле типа "serial" (пусть оно называется "id", а соответствующий ему ключ - "id_pkey") в качестве первичного ключа, появляется ошибка:
ERROR: duplicate key value violates unique constraint "id_pkey", хотя в запросе явно это поле не задается и вроде бы должно быть автоматически взято из соответствующей последовательности (пусть она называется "id_sequence").
Причина:
Последовательность, используемая для генерации поля "id_pkey", почему-то выдала значение, которое уже есть в таблице. Такое может случиться, например, если в какой-то строке таблице значение "id_pkey" задавалось / редактировалось вручную, в обход последовательности.
Решение:
Можно просто попробовать повторить вставку на случай, если следующее значение последовательности не приведет к ошибке. Или же восстановить последовательность:
select setval(' id_sequence', (select max( id ) + 1 from mytable));Другой вариант - выполнить:
REINDEX INDEX id_pkey;Спасибо http://vasilec.blogspot.com/2010/04/duplicate-key-value-violates-unique.html за подсказку.
Комментариев нет:
Отправить комментарий