Индекс ошибки данных Django вне диапазона с postrgresql

#django #postgresql #psycopg2

#django #postgresql #psycopg2

Вопрос:

Добрый вечер,

Я понимаю, что этот вопрос, возможно, задавался в прошлом, но я получаю следующие ошибки

«psycopg2.errors.NumericValueOutOfRange: целое число вне диапазона» и «django.db.utils.Ошибка данных: целое число вне диапазона»

при использовании postgresql с Django.

Похоже, что все другие ответы на подобные запросы предполагают, что я достигаю очень больших идентификаторов или pk. Это не так. Моя база данных очень маленькая, и я просто пытаюсь сохранить в ней объекты, и я не могу достичь 2 ^ 31-1 идентификаторов. Некоторые объекты сохраняются нормально, другие нет, и возникает ошибка. Похоже, что в этом нет шаблона, и это приводит в бешенство.

До недавнего времени я использовал для этого 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.
 

Комментарии:

1. Я думаю, что @Ben имел в виду, что если у вас есть какое-то промежуточное поле, число в этом поле может быть превышено. Но я не вижу никакого промежуточного поля в вашей модели….

2. на всякий случай, как насчет того, чтобы изменить intergerfield на BigIntergerfield и посмотреть, исчезнет ли эта ошибка?

3. Здравствуйте, я считаю, что BigIntegerField исправил это. Я не уверен, как это сделать. По крайней мере, это не вызвало ошибку в нескольких тестах, которые я выполнил. Если это так, то я безмерно благодарен.

4. Взгляните на ваши недавно сохраненные данные для этих BigIntegerFields … там вы найдете ответ, который вы ищете.

5. Это был случайный персональный идентификатор, явно намного больший, чем я предполагал. Это никогда не вызывало эту проблему с sqlite3, поэтому мне это не приходило в голову. Все остальные комментарии предполагали, что pk будет большим, и я пытался понять, как это может быть возможно.

Ответ №1:

Если вы включите ведение журнала django с:

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

в настройках django или посмотрите журналы базы данных, вы, вероятно, найдете число и поле, которые вызывают вашу ошибку.