PostgreSQL 17中json_exists的like_regex无法使用动态参数的问题及参数化实现方案问询
PostgreSQL 17中json_exists的like_regex无法使用动态参数的问题及参数化实现方案问询
我现在的最终目标是把正则表达式筛选条件作为命名参数传入查询,但卡在了基础语法上。先给大家看几个能正常运行的例子:
首先是静态正则匹配的查询,能正常工作:
SELECT * FROM runtime."Results" WHERE json_exists( "ListViewData", '$.** ? (@ like_regex "whatever")' )
我参考官方文档里的示例,这个带动态参数的数值/字符串匹配是正常执行的:
select JSON_EXISTS(jsonb '{"key1": [1,2,3]}', 'strict $.key1[*] ? (@ > $x)' PASSING 2 AS x)
我自己改写了一个字符串匹配的版本,同样能正常运行:
select JSON_EXISTS(jsonb '{"key1": [1,2,"what"]}', '$.** ? (@ == $x)' PASSING 'what' AS x)
但当我把动态参数的方式用到like_regex上时,就完全失效了。比如我把最初的查询改成带PASSING参数的形式:
SELECT * FROM runtime."Results" WHERE json_exists( "ListViewData", '$.** ? (@ like_regex $x)' PASSING 'what' AS x )
直接抛出语法错误:
SQL Error [42601]: ERROR: syntax error at or near "$x" of jsonpath input
我甚至写了个简化的测试用例,同样失败:
select JSON_EXISTS(jsonb '{"key1": [1,2,"what"]}', '$.** ? (@ like_regex $x)' PASSING 'what' AS x)
看起来like_regex好像不支持动态参数?我翻遍了官方文档,没找到明确说明这一点的内容,只看到一句模糊提到模式是字面量的描述。难道真的是like_regex不支持动态参数吗?
有没有什么办法能让我还是以正规参数的方式动态传入这个筛选条件呢?
内容来源于stack exchange
相关产品推荐
相关产品推荐

