小编Ryu*_*Ryu的帖子

使用更大的运算符在 jsonb 数组中搜索嵌套值

这是表定义(简化):

CREATE TABLE documents (
    document_id int4 NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    data_block jsonb NULL
);
Run Code Online (Sandbox Code Playgroud)

示例值:

INSERT INTO documents (document_id, data_block)
VALUES
   (878979, 
    '{"COMMONS": {"DATE": {"value": "2017-03-11"}},
     "PAYABLE_INVOICE_LINES": [
         {"AMOUNT": {"value": 52408.53}}, 
         {"AMOUNT": {"value": 654.23}}
     ]}')
 , (977656, 
    '{"COMMONS": {"DATE": {"value": "2018-03-11"}},
     "PAYABLE_INVOICE_LINES": [
         {"AMOUNT": {"value": 555.10}}
     ]}');
Run Code Online (Sandbox Code Playgroud)

我想搜索其中一个'PAYABLE_INVOICE_LINES'元素包含'value'大于 1000.00 的所有文档。

我的查询是

select *
from documents d
cross join lateral jsonb_array_elements(d.data_block -> 'PAYABLE_INVOICE_LINES') as pil 
where (pil->'AMOUNT'->>'value')::decimal > 1000
Run Code Online (Sandbox Code Playgroud)

但是,由于我想限制为 50 个文档,因此我必须对document_id …

postgresql performance index-tuning json postgresql-10 postgresql-performance

3
推荐指数
1
解决办法
2万
查看次数