Django бросает OperationalError: для строки индекса требуется 35424 байта, максимальный размер - 8191 - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть модель

class Question(models.Model):
number = models.IntegerField(default=1)
question = models.TextField(null=True,blank=True)
exam = models.ForeignKey(
    "Exam",
    related_name="questions",
    on_delete=models.CASCADE,
)
marks = models.IntegerField(default=1)

audio = models.FileField(
    upload_to='audios/',
    blank = True,
    null = True
)

class Meta:
    unique_together = [
        # no duplicated number per exam
        ("exam","question", "number"), 
    ]
    ordering = ("number",)


def __str__(self):
    return self.exam.name+ '-'+ self.question

Я хочу сохранить вопросы, используя эту модель. Я использовал форматированный текстовый редактор для поля вопроса и аудио в кодировке base64 для звукового поля. Всякий раз, когда я пытаюсь добавить новый экземпляр с большим форматированным текстом (т. Е. Содержит изображение), Django выдает исключение, говоря, что для строки индекса требуется 35424 байта, максимальный размер составляет 8191 \ n ",.

Я даже пытался загрузить новый экземпляр из django панели администратора и выдавшую ошибку:

OperationalError at /admin/exam/question/14/change/

index row requires 35424 bytes, maximum size is 8191

Request Method:     POST
Request URL:    http://127.0.0.1:9025/admin/exam/question/14/change/
Django Version:     3.0.1
Exception Type:     OperationalError
Exception Value:    index row requires 35424 bytes, maximum size is 8191

Exception Location:     /usr/local/lib/python3.7/site-packages/django/db/backends/utils.py in _execute, line 86
Python Executable:  /usr/local/bin/python
Python Version:     3.7.6
Python Path:    

['/backend','/usr/local/lib/python37.zip','/usr/local/lib/python3.7','/usr/local/lib/python3.7/lib-dynload','/usr/local/lib/python3.7/site-packages']

Server time:    Thu, 13 Feb 2020 15:07:35 +0000

1 Ответ

1 голос
/ 13 февраля 2020

Я полагаю, вы используете PostgreSQL, и вы увеличили ограничение размера индекса. Вы можете прочитать некоторые обсуждения здесь . Примечание от здесь :

Предложение USING GIST указывает PostgreSQL использовать структуру индекса generi c (GIST) при построении индекса. Если вы получаете сообщение об ошибке «ОШИБКА»: для строки индекса требуется 11340 байт, максимальный размер при создании индекса составляет 8191, скорее всего вы не добавили предложение USING GIST.

Это происходит потому, что вы добавили множественный индекс в трех полях, где одно из них является question:

unique_together = [
    # no duplicated number per exam
    ("exam","question", "number"), 
]

Вы можете использовать PostgreSQL -specifi c индекс вместо одного по умолчанию или что еще лучше - пересмотреть, если вам нужны поля с этой конфигурацией в unique_together

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...