U0600008:jsonb_extract_path 函数不支持 XXX 作为参数
描述
数据库类型与版本
- 源库类型与版本:PostgreSQL 所有版本。
- 目标库类型与版本:GaussDB 所有版本。
语法示例
PostgreSQL 的 jsonb_query_path 函数允许你使用 JSONPath 表达式来从 jsonb 数据中提取特定的信息。当只有两个参数时,UGO 会将 jsonb_query_path 函数转换成 GaussDB 的 jsonb_extract_path 函数,当函数参数大于两个时,UGO 将不进行转换,保持原样输出。
GaussDB 的 jsonb_extract_path 函数根据指定的路径从 jsonb 数据中提取特定信息,但是 jsonb_extract_path 函数需要指定明确的路径,不支持条件过滤、不支持 '*' 通配符等场景,当 jsonb_query_path 函数的 JSONPath 表达式中存在 jsonb_extract_path 不支持的路径时将生成此错误提示。如下所示:
SELECT jsonb_path_query(data, '$.address.*') FROM users; SELECT jsonb_path_query(data, '$.hobbies[*]') FROM users; SELECT jsonb_path_query(data, '$.hobbies[?(@ == "reading")]') FROM users;
改造建议
结合业务场景,参考以下两种改造方案:
1、改造 JSONPath 表达式,去除其中的 '*'、条件过滤等 GaussDB 不支持的路径,使用清晰的 jsonb 路径提取信息。
2、删除不支持的路径,向业务端返回更多数据,通过改造业务代码来进行数据过滤。