首页 > 解决方案 > Django达到序列的最大值

问题描述

我正在运行一个每天创建数百万条记录的程序,在运行该程序一年多之后,似乎我已经达到了我的 postgres 数据库的 id 限制。

我收到的错误是

django.db.utils.DataError:nextval:达到序列“main_records_id_seq”的最大值(2147483647)

有没有办法使用 SQL 或 django ORM 来扩展最大 id?还是有更好的解决方案?

标签: djangopostgresqldjango-orm

解决方案


Django 默认使用AutoField[Django-doc]来指定数据库端主键的值。AnAutoField是一个IntegerField[Django-doc],正如 Django 文档所说:

一个整数。-2147483648to2147483647的值在 Django 支持的所有数据库中都是安全的。

您可以使用的是BigAutoField[Django-doc],它将使用:

一个 64 位整数,很像 an ,AutoField只是它保证适合从19223372036854775807的数字。

如果您的应用程序在一年内生成 2'147'483'647,则可以使用BigAutoField4'294'967'298 年。

因此,您可以将模型定义为:

class MyModel(models.Model):
    id = models.BigAutoField(primary_key=True)

推荐阅读