Подтвердить что ты не робот

Django + PostgreSQL: как reset первичный ключ?

Я работаю над приложением в Django. Во-первых, для простоты я использовал sqlite3 для базы данных.

Однако, как только я перешел на PostgreSQL, у меня возникла небольшая проблема: первичный ключ не reset после очистки таблицы.

Это приложение - игра, которая воспроизводится в течение длительного периода (недель). Таким образом, каждый раз, когда начинается новая игра, все данные очищаются из базы данных, а затем добавляются новые рандомизированные данные.

Я хотел бы иметь возможность "начинать с" с первичными ключами, начиная с 1 каждый раз, когда я чищу/перестраиваю игру.

Код по-прежнему работает как есть, но целые числа являются довольно естественным способом описания объектов в моей игре. Я бы хотел, чтобы каждая новая игра начиналась с 1, а не там, где была остановлена ​​последняя игра.

Как я могу reset счетчик первичных ключей в PostgreSQL? Имейте в виду, что мне не нужно сохранять данные в таблице, так как я все равно стираю ее.

4b9b3361

Ответ 1

В своем каталоге приложений попробуйте следующее:

python manage.py help sqlsequencereset

Вставьте это в psql, чтобы запустить reset:

python manage.py sqlsequencereset myapp1 myapp2 | psql

Изменить: вот пример вывода этой команды в одной из моих таблиц:

BEGIN;
SELECT setval('"project_row_id_seq"', coalesce(max("id"), 1), max("id") IS NOT null) FROM "project_row";
COMMIT;

Ответ 3

Я рассматриваю первичные ключи auto-increment как чисто внутренние идентификаторы для записей базы данных, и я не люблю подвергать их пользователям. Разумеется, это общий дизайн, чтобы использовать их как часть URL-адресов, но даже там могут быть более подходящими пули или другие идентификаторы.