Postgres COPY命令手动运行,但不通过JAVA运行
我通过JAVA program builder运行此命令Postgres COPY命令手动运行,但不通过JAVA运行,java,postgresql,Java,Postgresql,我通过JAVA program builder运行此命令 plpgsql = "\"path_to_psql_executable\psql.exe" -U myuser -w -h myhost -d mydb -a -f "some_path\copy_7133.sql" 2> "log_path\plsql_7133.log\""; ProcessBuilder pb = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe", "/
plpgsql = "\"path_to_psql_executable\psql.exe" -U myuser -w -h myhost -d mydb -a -f "some_path\copy_7133.sql" 2> "log_path\plsql_7133.log\"";
ProcessBuilder pb = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe", "/c", plpgsql);
Process p = pb.start();
p.getOutputStream().close();
p.waitFor();
这将返回以下错误:
错误:编码“UTF8”的字节序列无效:0xbd上下文:复制
复印件7133,第4892行
问题是,如果我在cmd中手动运行SQL命令,那么它将成功复制所有数据,并给出插入的行数。无法找出原因
注意:该代码只对一个特定的文件造成问题,对于其余的工作正常
编辑:
正在运行的复制命令:
\copy s_m_asset_7140 FROM 'C:\ER\ETL\Unzip_7140\asset.csv' csv HEADER QUOTE '"' ENCODING 'UTF8';
命令给出的最后一个错误:
psql:C:/ER/ETL/Unzip_7140/copy_s_m_asset_7140。sql:1:错误:无效
编码“UTF8”的字节序列:0xa0上下文:复制s_m_资产_7140,
第10282行
但是除了一个“-”之外,似乎没有任何特殊的字符。不知道是什么,它是不能读的
有关abt DB的更多详细信息:
显示客户端编码;
“UNICODE”
显示服务器编码;
“UTF8”工作正常。但仍然不明白UTF8为什么不起作用。 我把编码改成拉丁文1,它成功了
\copy s_m_asset_7140 FROM 'C:\ER\ETL\Unzip_7140\asset.csv' csv HEADER QUOTE '"' ENCODING 'LATIN1';
有人能解释一下UTF8为什么不起作用吗?也许类似,也可以看看为什么要使用
ProcessBuilder
来运行复制命令copy
是一条SQL语句,也可以直接通过JDBC运行。错误消息表明psql
需要UTF-8编码的文件,但您的输入文件不是。更改SQL脚本中的client\u编码以匹配输入文件,或者更改输入文件的编码。@没有名称的\u horse\u:我的文件是UTF-8编码的.csv文件。我关心的是,如果存在任何编码问题,那么为什么手动成功运行相同的命令?