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/