gpt4 book ai didi

django - 在 Django PostgreSQL 中索引 JSONField

转载 作者:行者123 更新时间:2023-12-04 11:11:46 25 4
gpt4 key购买 nike

我正在使用一个简单的模型,该模型的属性将该对象的所有数据存储在 JSONField 中。将其视为将 NoSQL 数据传输到我的 PostgreSQL 数据库的方式。有点像这样:

from django.contrib.postgres.fields import JSONField   

class Document(models.Model):
content = JSONField()

每个 Document对象在其 content 中具有(或多或少)相同的键字段,所以我正在使用这些键查询和排序这些文档。对于查询和排序,我使用的是 Django 的 annotate()功能。我最近遇到了这个:

https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/indexes/

我也知道 PostgreSQL 使用 JSONB,这显然是可索引的。所以我的问题是:我可以索引我的 content以某种方式使复杂查询的读取操作更快?如果是这样,那么我该怎么做?我链接的文档页面没有示例。

最佳答案

对于那些想要索引特定键的人,创建一个原始的 sql 迁移:

  • 运行 ./manage.py makemigrations --empty yourApp哪里yourApp是您要为其更改索引的模型的应用程序。
  • 编辑迁移,即
  • operations = [
    migrations.RunSQL("CREATE INDEX idx_name ON your_table((json_field->>'json_key'));")
    ]
    哪里 idx_name是索引的名称, your_table是你的 table , json_field是您的 JSONField,和 json_key在这种情况下是您要索引的键。
    应该可以,但要验证一切顺利,请运行以下 sql:
    SELECT
    indexname,
    indexdef
    FROM
    pg_indexes
    WHERE
    tablename = '<your-table>';
    看看你的索引是否在那里。

    关于django - 在 Django PostgreSQL 中索引 JSONField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54824209/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com