Сбросить первичный ключ базы данных Postgres с помощью Django - PullRequest
2 голосов
/ 17 ноября 2011

У меня были ужасные проблемы с таблицами, потому что я создал свой собственный класс пользователя, а не переключился на класс Django по умолчанию.После неисчислимых головных болей мы решили сделать чистую python manage.py reset syncdb.Создан новый пользователь, но счетчик первичного ключа для User.id начал с того места, где остановился предыдущий, а это означает, что при создании других таблиц, использующих User.id в качестве первичного ключа, у них всегда 14 отключено.

Как я могу либо полностью переписать, чтобы они начинались с 1, либо изменить счетчик, чтобы теперь он был на 2 (поскольку я создал одного пользователя)?Если это связано с SQL, пожалуйста, дайте мне знать, где его разместить, так как мое приложение размещено на Heroku.

Спасибо!

Ответы [ 3 ]

6 голосов
/ 17 ноября 2011

Postgres по умолчанию создает новую последовательность для всех созданных столбцов типа serial. Имя по умолчанию для пользователя аутентификации django - auth_user, поэтому имя последовательности по умолчанию будет auth_user_id_seq или что-то в этом роде.

Вы можете найти следующее значение последовательности:

SELECT nextval('auth_user_id_seq');

, и вы можете установить его на 1 следующим образом:

SELECT setval('auth_user_id_seq', 1);
1 голос
/ 17 ноября 2011

Самый простой способ решить эту проблему (не удаляя всю базу данных) - это подключиться к базе данных с помощью клиента psql или sql (например, http://www.sqlmanager.net/en/products/postgresql/manager,, существует бесплатная облегченная версия). Затем введите следующую команду:

truncate <user_table> reset identity

тогда вы можете заполнить базу данных

на самом деле, вы также можете сделать это, используя необработанные запросы из оболочки django: https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly

0 голосов
/ 17 ноября 2011

Чтобы сбросить все данные, удалите базу данных, пересоздайте ее и запустите syncdb, чтобы заново создать таблицы.

Чтобы сбросить только счетчик приращений, этот вопрос должен быть полезен: Как сбросить postgres'последовательность первичного ключа, когда он выходит из-под контроля?

Часть, о которой вы говорите "при создании других таблиц, которые используют User.id в качестве первичного ключа, они всегда отключены на 14".это беспокоит.Вы не полагаетесь на автоинкрементные первичные ключи в каждой таблице для отношения, не так ли?

...