2017-06-30 31 views
0

我正在通過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」

+0

也許類似https://stackoverflow.com/questions/29888181/cannot-create-plpgsql-function-using-psql-f-filename-option –

+0

另請參閱https://stackoverflow.com/questions/20952893/postgresql -encoding-problems-on-windows-when-using-psql-command-line-utility –

+2

爲什麼使用「ProcessBuilder」來運行復制命令? 'copy'是一個SQL語句,也可以通過JDBC直接運行。 –

回答

0

工作。但仍不明白爲什麼UTF8不起作用。 我改變了編碼LATIN1和它的工作

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

有人可以請解釋爲什麼UTF8沒有工作?

相關問題