#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 или посмотрите журналы базы данных, вы, вероятно, найдете число и поле, которые вызывают вашу ошибку.