Syntaxfehler

Fragen und Probleme rund um die Abfragespache SQL.
castorp
Erfahrener Benutzer
Beiträge: 1174
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Syntaxfehler

Beitrag von castorp » Mi 20. Nov 2019, 22:19

Bitte nicht den money Datentyp verwenden. Der hat keine Vorteile aber einen Haufen Nachteile.

https://wiki.postgresql.org/wiki/Don%27 ... _use_money

Aber der Fehler klingt danach, als wäre Deine Datei keine UTF-8 Datei sondern z.B. eine ISO-8859-1 - gibt mal beim COPY Befehl ein anderes Encoding an
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Gisman
Erfahrener Benutzer
Beiträge: 1140
Registriert: Fr 20. Jan 2006, 15:30
Wohnort: Pfalz
Kontaktdaten:

Re: Syntaxfehler

Beitrag von Gisman » Do 21. Nov 2019, 10:23

Eventuell solltest du das Encoding deiner Eingangsdatei ändern (iconv unter Linux) oder mit set clientencoding auf Datenbankebene anpassen. Das Punktproblem kannst auch mit suchen/ersetzen in einem Editor lösen.

Bitflight
Benutzer
Beiträge: 33
Registriert: Mi 1. Feb 2012, 23:05

Re: Syntaxfehler

Beitrag von Bitflight » Do 21. Nov 2019, 10:38

Gibt es denn keine Möglichkeit/Methode ein CSV per Konsole in die Datenbank zu schieben, die sich nicht an Umlauten oder an nicht ISO-konformen Daten (30.12.2019) stört ?

castorp
Erfahrener Benutzer
Beiträge: 1174
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Syntaxfehler

Beitrag von castorp » Do 21. Nov 2019, 10:45

Das mit den Umlauten hängt mit dem Encoding der Datei zusammen und das kannst Du dem COPY Befehl mitteilen.

Für den Umgang mit nicht-standard Datumsformaten gibt es drei Möglichkeiten:

1. Du änderst ie Datei ab - vermutlich zu aufwändig und deswegen nicht praktikabel (es sei denn Du kannst die Erzeugung der Datei kontrollieren)
2. Du importierst in eine Zwischentabelle (wird oft als "staging table" bezeichnet) bei der die Spalte z.B. als text definiert ist. Dann verwendest Du einen INSERT ... SELECT Befehl der das Datum mit to_date() umwandelt und in die eigentliche Zieltabelle einfügt. Das ist ein sehr übliches Vorgehen.
3. Du verwendest eine anderes Tool für den Import, bei dem Du das Datumsformat explizit angeben kannst.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Gisman
Erfahrener Benutzer
Beiträge: 1140
Registriert: Fr 20. Jan 2006, 15:30
Wohnort: Pfalz
Kontaktdaten:

Re: Syntaxfehler

Beitrag von Gisman » Do 21. Nov 2019, 16:23

4. Du schreibst einen kleinen Importer z.B.mit Python, der das automatisiert.

Bitflight
Benutzer
Beiträge: 33
Registriert: Mi 1. Feb 2012, 23:05

Re: Syntaxfehler

Beitrag von Bitflight » Do 21. Nov 2019, 16:38

zu 1.) müsste ich schauen, ob der Download abänderbar ist. Ist ein Download meiner Umsätze vom Bankkonto. DAs möchte ich in mein Buchhaltungsprogramm was unter Linux bzw. Postgres läuft, importieren und das Buchhaltungsprogramm damit füttern.
zu 2.) ok, dann gibt es wohl keinen direkten Weg
zu 3.) ja, über Access wäre das kein Problem, wollte mich halt ein bißchen in Postgres einarbeiten

Bitflight
Benutzer
Beiträge: 33
Registriert: Mi 1. Feb 2012, 23:05

Re: Syntaxfehler

Beitrag von Bitflight » Do 21. Nov 2019, 16:44

Hallo,
danke erstmal für die Hilfe.
Das mit dem Encoding habe ich vorgestern schon mal probiert, bzgl. des Datumsformats. Hat nichts gebracht.
Das Buchhaltungsprogramm erwartet UTF8 (bzw. die Datenbank, die zur Software verwendet wird).
Wie wird in einem CSV festgelegt, welches Coding verwendet wird ?
Wie gesagt, ist einfach ein simpler Download der Umsätze meiner Bank.
@Gisman: mit Python bin ich nicht vertraut.
VBA, MS SQL, etwas php, ganz früher mal Pascal und C, das ist es so in etwa.
Suchen & Ersetzen des "," durch "." ist nicht praktikabel, bzw. kann ich da nicht kontrollieren, ob an anderer Stelle falsch korrigiert wird.

castorp
Erfahrener Benutzer
Beiträge: 1174
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Syntaxfehler

Beitrag von castorp » Do 21. Nov 2019, 17:02

Hab jetzt nochmal ein bisschen damit rumgespielt. So wie es aussieht richtet sich COPY nach dem DateStyle parameter.

Wenn die Datei als UTF-8 vorliegt, dann musst Du das beim COPY Befehl mit angegeben.

Das Folgende sollte also klappen:

Code: Alles auswählen

set datestyle = 'DMY';
copy zieltabelle (spalte1, spalte2, spalte3, ...) from '/home/u.csv' with (format csv, header true, encoding 'UTF-8')
Die Spaltenreihenfolge muss so angegeben werden, wie die Spalten in der Eingabedatei vorhanden sind.

Zumindest bei mir hat das mit einem Datum im Format 21.11.2019 geklappt.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Bitflight
Benutzer
Beiträge: 33
Registriert: Mi 1. Feb 2012, 23:05

Re: Syntaxfehler

Beitrag von Bitflight » Do 21. Nov 2019, 18:53

Muss ich ausprobieren. In der Fehlermeldung kam auch als Vorschlag zur Lösung, ich solle den datestyle ändern... konnte aber ad hoc nicht viel damit anfangen, bzw. versuchte dann über die option encoding irgendwas zu reißen.

Bitflight
Benutzer
Beiträge: 33
Registriert: Mi 1. Feb 2012, 23:05

Re: Syntaxfehler

Beitrag von Bitflight » Do 21. Nov 2019, 19:46

Bekomme ständig Fehler wegen den blöden Umlauten.

Das mit dem Set Datastyle war goldrichtig !
Datensätze konnte eingelesen werden, allerdings vorher Bereinigen der Umlaute (Suchen&Ersetzen).

Das ist natürlich lästig.

Antworten