0

我有一个 jsonb 列“数据”,其中包含类似 json 的树,例如:

{
    "libraries":[
        {    
            "books":[
                {
                    "name":"mybook",
                    "type":"fiction"
                },
                {
                    "name":"yourbook",
                    "type":"comedy"
                }
                {
                    "name":"hisbook",
                    "type":"fiction"
                }
            ]
        }
    ]
}

我希望能够使用根据类型从缩进的“书”json中选择一个值的查询来进行索引。所以所有的书名都是虚构的。

我能够使用 jsonb_array_elements 连接查询来做到这一点,但据我所知,这不会使用 GIN 索引进行优化。我的查询是

select books->'name'
from data,
     jsonb_array_elements(data->'libraries') libraries,
     jsonb_array_elements(libraries->'books') books,
where books->>'type'='grading'
4

1 回答 1

-1

如果您显示的示例数据是 JSON 中常见的数据类型,我建议您可能设置错误。

为什么不做一个图书馆表和一个书表,根本不使用 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;
于 2015-08-24T18:42:54.707 回答