我正在通過JAVA程序生成器此命令Postgres的COPY命令手動,但沒有運行通過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();
這回我下面的錯誤:
ERROR: invalid byte sequence for encoding "UTF8": 0xbd CONTEXT: COPY copy_7133, line 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: ERROR: invalid byte sequence for encoding "UTF8": 0xa0 CONTEXT: COPY s_m_asset_7140, line 10282
但似乎沒有任何特別管理字符除外「 - 」。不確定它無法讀取的內容。
更多詳情abt DB: show client_encoding; 「UNICODE」
show server_encoding; 「UTF8」
也許類似https://stackoverflow.com/questions/29888181/cannot-create-plpgsql-function-using-psql-f-filename-option –
另請參閱https://stackoverflow.com/questions/20952893/postgresql -encoding-problems-on-windows-when-using-psql-command-line-utility –
爲什麼使用「ProcessBuilder」來運行復制命令? 'copy'是一個SQL語句,也可以通過JDBC直接運行。 –