[BUG]Datax写入数据到psql报不能序列化特殊字符

1.问题描述

Datax从mongodb写入数据到psql报错如下

bash 复制代码
org.postgresql.util.PSQLException: ERROR: invalid bytesequence for encoding "UTF8": 0x00

2.原因分析

此为psql独有的错误,不能对特殊字符'/u0000',进行序列化,需要将此特殊字符替换掉,由于datax中不能对mongodb进行select处理,因此此处需要对源码进行处理。

由报错可知,出错的jar报为:plugin-rdbms-util-0.0.1-SNAPSHOT.jar

由报错可知,出错的class报为:com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter

3.问题解决

java 复制代码
//1.下载datax源码,找到com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter文件
//2.修改源码com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter类中的 Task 
//找到fillPreparedStatementColumnType方法
protected List<String> alterColumns;
//  case Types.LONGNVARCHAR:
                    // preparedStatement.setString(columnIndex + 1, column
                    //         .asString());
                    // break;//替换为
case Types.LONGNVARCHAR:
String value = column.asString();
            if (Objects.nonNull(value)) {
               value = value.trim().replaceAll("\u0000", "");
            }
            preparedStatement.setString(columnIndex + 1, value);
            break;
//3.编译plugin-rdbms-util模块形成plugin-rdbms-util-0.0.1-SNAPSHOT.jar
//4.替换plugin-rdbms-util-0.0.1-SNAPSHOT.jar
cp plugin-rdbms-util-0.0.1-SNAPSHOT.jar /datax/plugin/writer/postgresqlwriter/libs/

4.测试是否完成

5.安装包下载

plugin-rdbms-util-0.0.1-SNAPSHOT.jar安装包下载 提取码: kwhr

相关推荐
l1t2 小时前
DeepSeek总结的无需编译器:编写纯 SQL 的 Postgres 扩展
数据库·sql·postgresql
金玉满堂@bj2 小时前
PostgreSQL:企业级全能开源数据库
数据库·postgresql·开源
njsgcs3 小时前
c# solidworks createline 拉伸发现有微小两点间隙 导致拉伸变成薄壁特征 改bug画了6个小时 解决结果
c#·bug·solidworks
赵渝强老师3 小时前
【赵渝强老师】PostgreSQL的数据预热扩展pg_prewarm
数据库·postgresql
前端达人3 小时前
第18课:实战案例二,线上紧急 Bug 修复全过程
bug
代钦塔拉3 小时前
Qt 按钮 Lambda 信号槽重复绑定、多次触发 BUG 深度剖析与终极解决方案
c++·qt·bug
瀚高PG实验室15 小时前
left link changed unexpectedly in block xxxx of index ““index_xxxxx“
数据库·postgresql·瀚高数据库
mpHH1 天前
postgresql plancache
数据库·postgresql
瀚高PG实验室1 天前
debezium在LANG=zh_CN.UTF-8下,无法解析timestamp类型的列值为BC的字段
服务器·数据库·postgresql·瀚高数据库
倒流时光三十年1 天前
PostgreSQL 之 BRIN 索引应用场景
大数据·postgresql·brin 索引