Создает ли дамп Postgresql последовательности, начинающиеся с - или после - последнего ключа? - PullRequest
1 голос
/ 17 июня 2010

Я недавно создал дамп SQL базы данных за проектом Django, и после очистки SQL немного смог восстановить БД и все данные.Проблема была в том, что все последовательности были испорчены.Я попытался добавить нового пользователя и сгенерировал ошибку Python IntegrityError: duplicate key violates unique constraint.

Естественно, я решил, что мой дамп SQL не перезапустил последовательность.Но это так:

DROP SEQUENCE "auth_user_id_seq" CASCADE;
CREATE SEQUENCE "auth_user_id_seq" INCREMENT 1 START 446 MAXVALUE 9223372036854775807 MINVALUE 1 CACHE 1;
ALTER TABLE "auth_user_id_seq" OWNER TO "db_user";

Я выяснил, что повторная попытка создания пользователя (или любой новой строки в любой таблице с существующими данными и такой последовательностью) позволила успешно создать объект / строку.Это решило насущную проблему.

Но, учитывая, что последний идентификатор пользователя в этой таблице был 446 - то же самое начальное значение при создании последовательности выше - похоже, что Postgresql просто пытался начать создавать строки с этим ключом.

Предоставляет ли дамп SQL неверный стартовый ключ на 1?Или я должен вызвать другую команду для запуска последовательностей после заданного идентификатора запуска?Очень любопытно.

1 Ответ

3 голосов
/ 17 июня 2010

Дамп в порядке, без проблем. Если ваш код (или значение по умолчанию для столбца) использует nextval () для получения следующего значения из последовательности, все будет хорошо. Проверьте ваш код и посмотрите, что он делает, какой SQL выполняется. С помощью этой информации вы можете понять, почему что-то идет не так.

Удачи!

...