PostgreSql: ошибка дублирования pkey при вставке новых записей в таблицу восстановленной базы данных

Я использовал команды pg_dump а также psql сделать резервную копию моей производственной БД и восстановить ее на моем сервере разработки. Теперь, когда я пытаюсь просто вставить новую запись в одну из моих таблиц, я получаю следующее сообщение об ошибке: "ОШИБКА: значение дублирующего ключа нарушает ограничение уникальности"communication_methods_pkey" DETAIL: ключ (id)=(13) уже существует".

Почему этот идентификатор уже используется? Мне нужно обновить что-то, чтобы счетчик приращения идентификатора вернулся на правильный путь?

1 ответ

Решение

Похоже, последовательности, используемые для создания первичного ключа для каждой таблицы, имеют неправильное значение. Интересно, что pg_dump не включал последовательность setval в конце этого (я полагаю, что это должно быть).

Postgres рекомендует следующий процесс для исправления последовательностей: https://wiki.postgresql.org/wiki/Fixing_Sequences

По сути, вам нужно идентифицировать все ваши последовательности и создать сценарий sql для запуска, чтобы установить их на 1 больше, чем идентификаторы вставленного значения.

Другие вопросы по тегам