Django达到了序列的最大值

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种策略,并给出

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

我收到的错误是

django.db.utils.DataError:nextval:已达到序列“主记录id顺序”的最大值(2147483647)


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

这只与PostgreSql相关,与Django ORM无关。不幸的是,这个解决方案并非微不足道,它是一篇很好的文章,介绍了DB id迁移的4种策略,并给出了其优缺点

战略摘要:

  • 使用ALTERCOLUMN更改数据类型
  • 创建一个具有相同模式但ID为bigint类型的新表,并使用INSERT INTO
  • 这个策略与策略2非常相似,不同的是,我们不是在一个SQL查询中复制数据,而是缓慢地复制数据块 记录的时间更长
  • 向表中添加一个类型为bigint的新列。将id值复制到id_bigint,然后将新列重命名为id(通过 将现有id重命名为id_old)
  • Django默认使用指定数据库端主键的值。
    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自动处理的,实际上应用得相当快。