Django达到序列的最大值

问题描述 投票:0回答:1

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

我收到的错误是

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

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

django postgresql django-orm
1个回答
0
投票

这仅与PostgreSql有关,与Django ORM无关。不幸的是,该解决方案并不简单,this是一篇不错的文章,介绍了四种DB ID迁移策略,各有利弊。

策略摘要:

  1. 通过使用ALTER COLUMN更改数据类型。
  2. 使用bigint类型的相同模式butid创建一个新表,并使用INSERT INTO。
  3. 此策略与策略2非常相似,除了我们不是在一个SQL查询中复制数据,而是慢慢复制记录更长的时间。
  4. 将类型为bigint的新列添加到表中。将id值复制到id_bigint,然后将新列重命名为id(通过将现有ID重命名为id_old)。

0
投票

Django默认使用AutoField [Django-doc]来指定数据库端主键的值。 AutoFieldAutoField,正如Django文档所述:

整数。值IntegerField [Django-doc]IntegerField在Django支持的所有数据库中都是安全的。

您可以使用的是-2147483648,它将使用:

一个64位整数,非常类似于2147483647,不同之处在于,它保证可以容纳BigAutoField [Django-doc]BigAutoField的数字。

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

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

1
© www.soinside.com 2019 - 2024. All rights reserved.