问题描述
我试图按照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))
但是,目前对JSONPath的索引支持非常有限
那到底是什么意思?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)