GAUSSDB(DWS) 报错:invalid input syntax for type json 的解决方法
【摘要】 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 打印执行计划,语句正常执行
2. 对于a中转json/jsonb会报错的字段,尝试传其他类型(varchar,bytea等)发现均不报错
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格式:
6.数据格式转成bytea之后,发现有多余的09编码
7.验证09编码前的e58f98为变
8.测试也可反映相同场景
9.通过正确和错误的元数据对比,发现错误元数据文字后有冗余的\t字符,删除后is_json输出为t
【问题根因】客户的元数据中有409条不满足json转换,存在异常字符
【解决方案】对409条数据进行逐个排查,删除冗余的\t字符;或建议直接确认元数据来源,避免异常字符导入至元数据
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)