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
无法做到这一点。您必须根据自己的情况创建更加自定义的方法。
我的模特:
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
无法做到这一点。您必须根据自己的情况创建更加自定义的方法。