Postgres COPY命令手动运行但不通过JAVA运行

时间:2017-06-30 06:50:45

标签: java postgresql

我正在通过JAVA程序构建器运行此命令

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语境:COPY   copy_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语境:COPY s_m_asset_7140,   第10282行

但除了' - '之外,似乎没有任何特殊字符。不确定它无法阅读。

更多细节abt DB: show client_encoding; " UNICODE"

show server_encoding; " UTF8"

1 个答案:

答案 0 :(得分:0)

的工作。但仍然不明白为什么UTF8不起作用。 我将编码更改为LATIN1并且工作正常

\copy s_m_asset_7140 FROM 'C:\ER\ETL\Unzip_7140\asset.csv' csv HEADER QUOTE '"' ENCODING 'LATIN1';

有人可以解释为什么UTF8不起作用吗?