Ошибка Django PostgreSQL JSONField db_index

#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. Большое спасибо за информацию. Я просто хотел провести тест производительности.