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
我有一个 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