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"
vielleicht ähnlich https://stackoverflow.com/questions/29888181/cannot-create-plpgsql-function-using-psql-f-filename-option –
Siehe auch https://stackoverflow.com/questions/20952893/postgresql -encoding-problems-on-windows-wenn-benutze-psql-command-line-utility –
Warum verwenden Sie einen 'ProcessBuilder', um den Kopierbefehl auszuführen? 'copy' ist eine SQL-Anweisung, die auch direkt über JDBC ausgeführt werden kann. –