Postgres 数据库中的索引 JSON 数组

Index JSON Array in Postgres DB

我有一个 table ,其中每一行都有一个 JSON 结构,如下所示,我试图在 postgresql 数据库中建立索引,并且想知道最好的方法是:

{
    "name" : "Mr. Jones",
    "wish_list": [
        {"present_name": "Counting Crows",
        "present_link": "www.amazon.com"},
        { "present_name": "Justin Bieber",
        "present_link": "www.amazon.com"},
    ]
}

我想在 wish_list 数组中的每个 present_name 上放置一个索引。这里的目标是我希望能够通过索引找到人们想要特定礼物的每一行。

我一直在阅读如何 create an index on a JSON 这很有意义。我遇到的问题是在 JSON 对象中的数组的每个元素上创建索引。

我的最佳猜测是使用类似 json_array_elements 函数的东西,并为通过它返回的每个项目创建索引。

感谢您朝着正确的方向推动!

请查看 Postgres 文档中的 JSONB Indexing 部分。 对于您的案例索引配置可能如下:

CREATE INDEX idx_gin_wishlist ON your_table USING gin ((jsonb_column -> 'wish_list'));

它会在 wish_list 中存储每个键和值的副本,但是你应该小心命中索引的查询。您应该使用 @> 运算符:

SELECT jsonb_column->'wish_list'
FROM your_table WHERE jsonb_column->'wish_list' @> '[{"present_link": "www.amazon.com", "present_name": "Counting Crows"}]'; 

强烈建议检查现有答案:

  • How to query for array elements inside JSON type
  • Index for finding an element in a JSON array