这是表定义(简化):
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