PostgreSQL 16中如何用变量路径调用jsonb_path_query_first?
问题解决方法
问题核心是参数类型不匹配:jsonb_path_query_first函数的第二个参数要求是jsonpath类型,但你CTE中的path字段定义为text类型,PostgreSQL无法自动完成隐式类型转换,因此触发报错。
只需将text类型的路径值转换为jsonpath类型即可解决,提供两种实现方式:
方法一:在CTE中直接定义jsonpath类型路径
with x as (select '{"a": {"b": {"c": "d"}}}'::jsonb data), y as (select '$.a.b.c'::jsonpath path) -- 直接指定为jsonpath类型 select *, jsonb_path_query_first(x.data, y.path) from x, y;
方法二:调用函数时显式转换类型
with x as (select '{"a": {"b": {"c": "d"}}}'::jsonb data), y as (select '$.a.b.c'::text path) select *, jsonb_path_query_first(x.data, y.path::jsonpath) -- 显式将text转为jsonpath from x, y;
两种方式都能正常提取JSON数据,推荐第一种,可提前明确类型,避免后续重复转换操作。
内容的提问来源于stack exchange,提问作者Roeland Van Heddegem
相关产品推荐
相关产品推荐

