Django达到了序列的最大值
我正在运行一个每天创建数百万条记录的程序,在运行这个程序一年多之后,我似乎已经达到了我的postgres数据库的id限制 我收到的错误是 django.db.utils.DataError:nextval:已达到序列“主记录id顺序”的最大值(2147483647)Django达到了序列的最大值,django,postgresql,django-orm,Django,Postgresql,Django Orm,我正在运行一个每天创建数百万条记录的程序,在运行这个程序一年多之后,我似乎已经达到了我的postgres数据库的id限制 我收到的错误是 django.db.utils.DataError:nextval:已达到序列“主记录id顺序”的最大值(2147483647) 有没有办法使用SQL或django ORM扩展最大id?还是有更好的解决方案?这只与PostgreSql相关,与Django ORM无关。不幸的是,这个解决方案并非微不足道,它是一篇很好的文章,介绍了DB id迁移的4种策略,并给出
有没有办法使用SQL或django ORM扩展最大id?还是有更好的解决方案?这只与PostgreSql相关,与Django ORM无关。不幸的是,这个解决方案并非微不足道,它是一篇很好的文章,介绍了DB id迁移的4种策略,并给出了其优缺点 战略摘要:
AutoField
是一个,正如Django文档所说:
整数。从-2147483648
到2147483647
的值在Django支持的所有数据库中都是安全的
您可以使用的是a,它将使用:
一个64位整数,很像自动字段
,但它保证适合从1
到9223372036854775807
的数字
如果您的应用程序在一年内生成2'147'483'647,则您可以在4'294'967'298年内使用BigAutoField
因此,您可以将模型定义为:
class MyModel(models.Model):
id = models.BigAutoField(primary_key=True)
类MyModel(models.Model):
id=models.BigAutoField(primary_key=True)
迁移会由Django自动处理吗?我现在正在运行迁移,这需要一段时间,因为它被应用于大量记录,但它看起来似乎正在工作。如果它完成或收到错误,我会报告。@Horatiujeflia:如果我将id
字段添加到测试项目的模型中,它确实会进行迁移,而对于PostgreSQL,它会更改字段(使用sqlmigrate
可以检查查询)@HoratiuJeflea迁移是由Django自动处理的,实际上应用得相当快。