我有一个表,其中每一行都有一个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函数之类的东西,并为通过它返回的每个项目创建一个索引。
感谢你推动正确的方向!
答案 0 :(得分:2)
请查看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"}]';
强烈建议检查现有的nswers: