2017-06-30 8 views
0

ich diesen Befehl leite über JAVA-Programm builderPostgres COPY Befehl manuell, aber nicht durch JAVA läuft

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(); 

Das bin ich den folgenden Fehler zurückgibt:

ERROR: invalid byte sequence for encoding "UTF8": 0xbd CONTEXT: COPY copy_7133, line 4892

Der Haken ist, wenn ich die Führen Sie den SQL-Befehl manuell in cmd aus, dann kopiert er alle Daten erfolgreich und gibt mir die Anzahl der eingefügten Zeilen an. Nicht in der Lage, den Grund herauszufinden

HINWEIS: Der Code verursacht nur für eine bestimmte Datei Problem, für Rest funktioniert gut.

EDIT: Befehl Kopieren ist Lauf:

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

Der letzte Fehler der Befehl gab:

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

Aber es scheint, keine Sonderzeichen außer einem ‚zu sein - ". Nicht sicher, was es nicht lesen kann.

Wenige weitere Details ab DB: show client_encoding; "UNICODE"

show server_encoding; "UTF8"

+0

vielleicht ähnlich https://stackoverflow.com/questions/29888181/cannot-create-plpgsql-function-using-psql-f-filename-option –

+0

Siehe auch https://stackoverflow.com/questions/20952893/postgresql -encoding-problems-on-windows-wenn-benutze-psql-command-line-utility –

+2

Warum verwenden Sie einen 'ProcessBuilder', um den Kopierbefehl auszuführen? 'copy' ist eine SQL-Anweisung, die auch direkt über JDBC ausgeführt werden kann. –

Antwort

0

gearbeitet. Aber immer noch nicht verstehen, warum UTF8 nicht funktioniert hat. änderte ich die Codierung LATIN1 und es funktionierte

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

Kann jemand pls erklären, warum UTF8 nicht funktioniert?

Verwandte Themen