Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres COPY命令手动运行,但不通过JAVA运行_Java_Postgresql - Fatal编程技术网

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

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", "/

我通过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", "/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文件。我关心的是,如果存在任何编码问题,那么为什么手动成功运行相同的命令?