Numerisches Format

Hiho …

ich versuche gerade leicht verzweifelt mit COPY eine CSV Datei in eine Tabelle zu spulen. In dieser CSV Datei (ca. 500 MB) sind Zahlen in der klassischen deutschen Form 0,00 dargestellt. LC_NUMERIC meiner PG-Installation ist auch auf German eingestellt. Hat jemand eine Idee die mich weiter bringt? Eine Ahnung warum er sich dennoch weigert diese Zahlen richtig zu interpretieren?

Das meint der Fehler:

ERROR:  invalid input syntax for type numeric: "0,00"
KONTEXT:  COPY table, line 2, column zahl: "0,00"

Auch wenn ich vorher ein
SET LC_NUMERIC TO German;
absetze - das gleiche Problem

Danke & Gruß

Ja. Ein Komma ist halt kein Punkt. Punkt. Tools wie awk oder sed oder PERL und einige tausend andere existieren.


Andreas

für Dich :slight_smile:

ich weiss, dass das Komma kein Punkt ist,

aber wie bringe ich dem PG / der Client-Verbindung bei, dass er bitte ein Komma als Dezimal-Trennzeichen verwenden soll ?!

Du hast sehr schnell verstanden. Gut.

aber wie bringe ich dem PG / der Client-Verbindung bei, dass er bitte ein Komma als Dezimal-Trennzeichen verwenden soll ?!

Das hast Du allerdings überlesen. Das wirst Du nun sicher schnell wiederholen & verstehen. Alternativ: eine INPUT-table, in die Du das als Text einliest und dann verarbeitest.

Andreas

OMG …

wegen schnoeden Kommas …

nagut

Schreib einen Patch. Beachte dabei, daß CSV weiterhin funktioniert. Danke.

Andreas

Du könntest auch mit den schon erwähnten Tools awk oder sed das komma in einen Punkt ändern und die Ausgabe in psql pipen. Es gibt da viele elegante Möglichkeiten neben dem üblichen Suchen/Ersetzen in einem Editor deiner Wahl.

Grüssle Uwe

und werde ich auch - bzw. habe ich schon …
man darf aber auch bemerken, dass das nicht sehr befriedigend ist :slight_smile: auch wenn es andere DBMS gibt die es noch schlechter können

ich war zunaechst etwas optimistisch, weil z.B. ein set client_encoding … und set datestyle bei ähnlichen problemen auf der connection ja auch weiter half - da lag es doch eigentlich nahe, mir für soetwas vgl. triviales wie das komma ein set decimal_separator oder set number_format zu wünschen …

naja … zumindest muss ich nicht sterben

Natürlich kannst Du Dir das wünschen. Daher schrieb ich ja auch schon, schreib einen Patch dafür :wink:

Andreas

gepatched müsste auch COPY … QUOTE [ AS ] ‘quote’ werden … es ist nicht möglich quote “abzuschalten” z.B. durch ein QUOTE AS ‘’ - da muss man sich immer irgendein Zeichen ausdenken, dass dann hoffentlich nicht in der Datei vorkommt.

Nicht schlecht wäre auch, wenn man die Felder der CSV-Datei explizit auf die Columns der Zieltabelle mappen könnte.

Hallo,

Ich habe selbes Problem wie symbiont… auf einer 8.4.1

Ist mittlerweile eine Lösung verfügbar? Etwa wie oben beschrieben vor dem COPY Befehl etwas wie "Set decimal_seperator = ‘,’; ".
Sonst bleibt nur der Weg die Datei in einem Zwischenschritt zu “bereinigen”?