Django PostgreSQL JSONField db_index 错误

Django PostgreSQL JSONField db_index error

我的模特:

from django.db import models
from django.contrib.postgres.fields import JSONField

class MyModel(models.Model):
    data = JSONField(blank=True, null=True)

我创建了一些对象并用一些 JSON 填充了 "data" 字段

然后我尝试为 "data" 字段创建索引

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

我该如何解决?

this answer可以看出,这是b-tree索引的一个限制。对此没有简单的解决方案。索引整个 JSONField 也没有任何意义。您首先出于什么原因尝试索引 JSONField?

我的建议是删除此索引,因为我怀疑是否需要这样做。您可能希望尝试更复杂的索引,但 Django 内置的 db_index 无法做到这一点。您必须根据自己的情况创建更加自定义的方法。