[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

相关推荐
zxrhhm3 小时前
PostgreSQL的交互式终端使用一系列命令来获取有关文本搜索配置对象的信息
数据库·postgresql
一心只为学4 小时前
PostgreSql+Pgpool-II配置高可用集群(超详细)
数据库·postgresql·高可用·pgpool
Kisorge7 小时前
【C语言】代码BUG排查方式
c语言·开发语言·bug
喝醉酒的小白8 小时前
PostgreSQL: 事务年龄
数据库·postgresql
Amd79411 小时前
PostgreSQL 的特点
postgresql·数据类型·并发控制·关系型数据库·安全性·可扩展性·数据库特性
安卓机器12 小时前
探索 Python编程 调试案例:配置日志记录器查看程序运行bug
bug
程序员学习随笔1 天前
PostgreSQL技术内幕21:SysLogger日志收集器的工作原理
数据库·postgresql
秦时明月之君临天下1 天前
PostgreSQL标识符长度限制不能超过63字节
数据库·postgresql
Amd7941 天前
PostgreSQL 的历史
postgresql·开源软件·计算机科学·软件开发·关系型数据库·数据库技术·数据库历史
gis分享者1 天前
麒麟V10系统,postgres+postgis安装,保姆级教程,包含所有安装包
postgresql·安装·postgis·麒麟系统