#django #postgresql #jsonb
#django #postgresql #jsonb
Вопрос:
Моя модель:
from django.db import models
from django.contrib.postgres.fields import JSONField
class MyModel(models.Model):
data = JSONField(blank=True, null=True)
Я создал несколько объектов и заполнил поле «данные» несколькими JSON
Затем я попытался создать индекс для поля «данные»
class MyModel(models.Model):
data = JSONField(blank=True, null=True, db_index=True)
Выполняйте миграции
python manage.py makemigrations
Перенести
python manage.py migrate
Длинная обратная трассировка, и последняя строка:
django.db.utils.OperationalError: index row requires 8336 bytes, maximum size is 8191
Как я могу это исправить?
Ответ №1:
Как вы можете видеть из этого ответа, это ограничение индекса b-дерева. Для этого нет простого решения. Индексирование всего JSONField также на самом деле не имеет никакого смысла. По какой причине вы пытаетесь проиндексировать JSONField в первую очередь?
Моей рекомендацией было бы удалить этот индекс, поскольку я сомневаюсь, что это требуется. Возможно, вы захотите попробовать более сложный индекс, но встроенный Django db_index
не способен на это. Вам пришлось бы создать более индивидуальный подход, основанный на вашей ситуации.
Комментарии:
1. Большое спасибо за информацию. Я просто хотел провести тест производительности.