我一直在用Django开发一个应用程序。首先,为了简单起见,我一直使用sqlite3作为数据库。
然而,一旦我转移到PostgreSQL,我就遇到了一个小问题:一旦我清空一个表,主键就不能重置。
这个应用程序是一个游戏,是玩了很长一段时间(周)。因此,每次新游戏开始时,所有数据都会从数据库中清除,然后添加新的随机数据。
我希望每次清理/重新构建游戏时,都能从1开始使用主键“重新开始”。
代码仍然按原样工作,但整数是描述游戏中对象的一种非常自然的方式。我希望每个新游戏都从1开始,而不是从上一个游戏停止的地方开始。
如何在PostgreSQL中重置主键计数器?请记住,我不需要保留表中的数据,因为我无论如何都会将其清除。
发布于 2009-02-13 07:04:31
在你的app目录中,试试这个:
python manage.py help sqlsequencereset像这样通过管道将其输入psql以实际运行重置:
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;发布于 2018-05-10 23:20:57
正如"Van Gale“所建议的,您可以使用命令来解决运行sqlsequencereset时遇到的问题。
或
您可以通过以下方式在python内部执行sqlsequencereset生成的SQL查询(使用默认数据库):
from django.core.management.color import no_style
from django.db import connection
from myapps.models import MyModel1, MyModel2
sequence_sql = connection.ops.sequence_reset_sql(no_style(), [MyModel1, MyModel2])
with connection.cursor() as cursor:
for sql in sequence_sql:
cursor.execute(sql)我用Python3.6、Django2.0和PostgreSQL 10测试了这段代码。
发布于 2011-12-21 03:44:59
如果执行原始sql,可以执行以下操作:
ALTER SEQUENCE youApp_id_seq RESTART WITH 1;文档:http://www.postgresql.org/docs/8.2/static/sql-altersequence.html
https://stackoverflow.com/questions/544791
复制相似问题