django - Django达到序列的最大值
问题描述
我正在运行一个每天创建数百万条记录的程序,在运行该程序一年多之后,似乎我已经达到了我的 postgres 数据库的 id 限制。
我收到的错误是
django.db.utils.DataError:nextval:达到序列“main_records_id_seq”的最大值(2147483647)
有没有办法使用 SQL 或 django ORM 来扩展最大 id?还是有更好的解决方案?
解决方案
Django 默认使用AutoField
[Django-doc]来指定数据库端主键的值。AnAutoField
是一个IntegerField
[Django-doc],正如 Django 文档所说:
一个整数。从
-2147483648
to2147483647
的值在 Django 支持的所有数据库中都是安全的。
您可以使用的是BigAutoField
[Django-doc],它将使用:
一个 64 位整数,很像 an ,
AutoField
只是它保证适合从1
到9223372036854775807
的数字。
如果您的应用程序在一年内生成 2'147'483'647,则可以使用BigAutoField
4'294'967'298 年。
因此,您可以将模型定义为:
class MyModel(models.Model):
id = models.BigAutoField(primary_key=True)