Postgresql json从数组包含的第二层中的值中选择
我有一个jsonb列“data”,其中包含类似json的树,例如:Postgresql json从数组包含的第二层中的值中选择,postgresql,postgresql-9.4,jsonb,Postgresql,Postgresql 9.4,Jsonb,我有一个jsonb列“data”,其中包含类似json的树,例如: { "libraries":[ { "books":[ { "name":"mybook", "type":"fiction" }, { "name":"you
{
"libraries":[
{
"books":[
{
"name":"mybook",
"type":"fiction"
},
{
"name":"yourbook",
"type":"comedy"
}
{
"name":"hisbook",
"type":"fiction"
}
]
}
]
}
我希望能够使用查询进行索引,根据类型从缩进的图书JSON中选择一个值。
所以所有的书名都是虚构的
我可以使用jsonb_数组_元素和联接查询来实现这一点,但据我所知,使用GIN索引无法优化这一点。
我的问题是
select books->'name'
from data,
jsonb_array_elements(data->'libraries') libraries,
jsonb_array_elements(libraries->'books') books,
where books->>'type'='grading'
如果您显示的示例数据是JSON中常见的数据类型,我建议您可能设置错误 为什么不制作一个library表和book表,而不使用JSON呢?看来JSON在这里不是正确的选择
CREATE TABLE library
(
id serial,
name text
);
CREATE TABLE book
(
isbn BIGINT,
name text,
book_type text
);
CREATE TABLE library_books
(
library_id integer,
isbn BIGINT
)
select book.* from library_books where library_id = 1;
在一般的json路径查询搜索方面有一些工作,但除了json_extract_path之外,在9.4或9.5中还没有其他内容,json_extract_path不处理通配符条目、模式匹配等。@Beretor只是想知道您是否找到了解决方法。上面的示例就是这样一个示例。实际上,之所以选择json,是因为这里的数据非常动态,并且不仅包括书籍或库,它们也是我用来简化示例的代理