我一直在Django 做一个应用程序.首先,为了简单起见,我一直使用sqlite3作为数据库.

然而,一旦我转移到PostgreSQL,我就遇到了一个小问题:一旦我清空一个表,主键就不会重置.

此应用程序是一款长时间(数周)玩的游戏.因此,每次新游戏开始时,所有数据都会从数据库中清除,然后添加新的随机数据.

我希望每次清理/重建游戏时都能用主键从1开始"重新开始".

代码仍然按原样工作,但是整数是描述游戏中对象的一种非常自然的方式.我希望每一场新游戏都从1开始,而不是从上一场比赛停止的地方开始.

如何在PostgreSQL中重置主键计数器?请记住,我不需要保留表中的数据,因为无论如何我都会将其清除.

推荐答案

在应用程序目录中,try 以下操作:

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;

Database相关问答推荐

位置运算符($)工作不正确

为什么Hibernate会为@JoinTable的双向@OneToMany关系生成一个复杂的子查询?

更新数据后,TableView停止按搜索栏进行筛选

删除Postgres中的JSONB列并在不停机的情况下回收空间

如果我想支持我的工作负载,我需要多少个 node ?

如何使授权服务器与外部数据库保持同步?

当某些 node 死亡时,mongo 副本集选举如何表现?

如何在没有sqlmock的情况下模拟db ping

MongoDB 中的 OVER PARTITION 类似功能

Active Record - 获取数据库中的第二个、第三个.. 项(无 ID)

H2 - 如何截断(truncate)所有表?

数据库设计:文件路径的首选字段长度

:force => true 在模式文件中是什么意思

使用varchar作为主键?

使用脚本语言动态数据库

有人可以详细解释 SOLR requestHandlers 和 responseWriters 吗?

SQL 查询 - 如何按 null 或不为 null 进行过滤

多个和单个索引

如何修复 Postgres 上过时的 postmaster.pid 文件?

如何在 Java 中检测 SQL 表的存在?