GAUSSDB(DWS) 报错:invalid input syntax for type json 的解决方法

举报
绝地狂喵 发表于 2025/01/02 15:08:46 2025/01/02
398 0 0
【摘要】 GAUSSDB(DWS) 报错:invalid input syntax for type json 的解决方法

【版本信息】813.320

【问题描述】客户执行select a::json from xxx 语句,报错invalid input syntax for type json; a的数据类型为varchar

【处理方法】

1. 对于a中不报错的元数据字段(通过where条件过滤)并设置set enable_fast_query_shipping = off 打印执行计划,语句正常执行

cke_19105.jpeg

2. 对于a中转json/jsonb会报错的字段,尝试传其他类型(varchar,bytea等)发现均不报错

cke_47375.jpeg

3. 尝试把a改为json类型,插入原表数据,发现也会报json格式错

4. 通过上述排查,已确认客户元数据中存在格式不满足json的数据,于是通过is_json函数对于此部分数据进行筛选:

CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
DECLARE
maybe_json json;
BEGIN
BEGIN
maybe_json := input_text;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;
RETURN TRUE;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

5. 筛选发现客户的200万+条数据中,有409条无法转换成json格式:

cke_119618.jpeg

6.数据格式转成bytea之后,发现有多余的09编码

cke_25127.jpeg

7.验证09编码前的e58f98为变

cke_29833.jpeg

8.测试也可反映相同场景

cke_57467.png

9.通过正确和错误的元数据对比,发现错误元数据文字后有冗余的\t字符,删除后is_json输出为t

【问题根因】客户的元数据中有409条不满足json转换,存在异常字符

【解决方案】对409条数据进行逐个排查,删除冗余的\t字符;或建议直接确认元数据来源,避免异常字符导入至元数据

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。