首页 > 解决方案 > Django DataError 索引超出 postrgresql 范围

问题描述

晚上好,

我意识到过去可能已经问过这个问题,但我收到以下错误

“psycopg2.errors.NumericValueOutOfRange:整数超出范围”和“django.db.utils.DataError:整数超出范围”

在 Django 中使用 postgresql 时。

对类似查询的其他回复似乎都表明我正在达到非常大的 id 或 pk。不是这种情况。我的数据库非常小,我只是想将对象保存到其中,而且我不可能达到 2^31-1 个 id。有些对象可以保存,有些则不会并引发错误。它似乎没有任何规律,令人愤怒。

直到最近我一直在使用 sqlite,我从来没有遇到过这个问题。

我是 postgresql 的新手,但数据库存在,已成功迁移,我可以看到 pgAdmin 中的字段。

该项目非常复杂,我无法在不发布大量代码的情况下提供最低限度的可重现示例,但我很乐意详细说明。

上述原因可能是什么?

根据要求,models.py 的一部分:

class Requirement(models.Model):
    module = models.ForeignKey(Module, on_delete=models.CASCADE, null=False)
    signups = models.ManyToManyField('Student', through='SignUp', blank=True)
    etc.

class Student(models.Model):
    first_name = models.CharField(max_length=50, null=False)
    signups = models.ManyToManyField('Requirement', through='SignUp')
    etc.

class Signup(models.Model):
    requirement = models.ForeignKey(Requirement, on_delete=models.CASCADE, null=False)
    student = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True) 
    etc.

标签: djangopostgresqlpsycopg2

解决方案


如果您启用 django 日志记录:

LOGGING = {
    # ...
    'loggers': {
        # ...
        'django.db': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    },
}

在 django 设置中,或查看数据库日志,您可能会找到导致错误的数字和字段。


推荐阅读