首页 > 解决方案 > PostgreSQL - 在 JSONPath 比较表达式中使用的索引 JSON 字段

问题描述

给定 PostgreSQL 13.3 表和数据

CREATE TABLE transaction (message jsonb NOT NULL);
INSERT INTO transaction(message) VALUES ('{"amount": 1.00}'), ('{"amount": 2.00}');

索引

CREATE INDEX ON transaction (((message->'amount')::numeric));

在查询中使用

SELECT t.message FROM transaction t
WHERE (t.message->'amount')::numeric > 1.00;

两个指标都没有

CREATE INDEX ON transaction USING GIN (message);
CREATE INDEX ON transaction USING GIN (message jsonb_path_ops);

在查询中使用

SELECT t.message FROM transaction t
WHERE t.message @@ format('$.amount > %s', 1.00)::jsonpath;

PostgreSQL 中有没有一种方法来索引transaction.message列,以便 JSONPath@@运算符使用索引而不是执行 Seq Scan?

标签: postgresqlindexingjsonbjsonpath

解决方案


推荐阅读