如何使用jsonb_path_match索引PostgreSQL 12 JSONB列中要查询的字段

问题描述

我试图按照https://www.postgresql.org/docs/current/functions-json.html中的建议,按照How can I prevent SQL injection with arbitrary JSONB query string provided by an external client?使用jsonb_path_match(),以便我可以使用参数化查询查询我的JSON数据,该查询具有外部(可能是不安全的)客户端提供的约束。经过一番调查,我发现我可以使用btree索引,例如:

CREATE INDEX IF NOT EXISTS idxName ON "tableName" ((jsonbCol->>'field'))

哪些查询用于:

SELECT * FROM "tableName" WHERE jsonbCol->>'field' < 'someVal'

但是使用jsonb_path_match()时不使用索引:

SELECT * FROM "tableName" WHERE jsonb_path_match(jsonbCol,'$.field < "someVal"')

我可以使用jsonb_path_match()进行什么样的索引来支持查询

如果特定示例有解决方案,可以将其应用于其他类型的查询,例如:

$.f1[*].f2 == "someString"
exists($.f1)
exists($.f1[*] ? (@.f2 == "someString" && @.f3 < someNumber))

https://dev.to/scalegrid/using-jsonb-in-postgresql-how-to-effectively-store-index-json-data-in-postgresql-5d7e

但是,目前对JSONPath的索引支持非常有限

那到底是什么意思?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)