FEHLER: ungültige Eingabesyntax für Typ timestamp

Hallo Forum

Ich mache gerade meine ersten Schritte mit Postgres und stolpere über ein Problem beim Import von Daten aus einer Textdatei in eine Tabelle.

Meine Tabelle, in welche ich die Daten reinladen möchte, sieht folgendermassen aus:

CREATE TABLE "DATA"."DATA_ORIG"
(
  "REFERENCE_TS" timestamp without time zone NOT NULL,
  "INSTALLATION_ID" smallint NOT NULL,
  "PARAMETER_ID" smallint NOT NULL,
  "MEAS_CAT_ID" smallint NOT NULL,
  "LOAD_TS" timestamp without time zone NOT NULL,
  "VALUE_NU" numeric,
  "TIME_GRANULARITY_TX" character(1) NOT NULL,
  CONSTRAINT "DATA_ORIG_pkey" PRIMARY KEY ("INSTALLATION_ID", "PARAMETER_ID", "MEAS_CAT_ID", "REFERENCE_TS")
)

Das Textfile, welches die Daten enthält, sieht folgendermassen aus:

2016-04-02 10:10:00;1;3;1;2016-05-13 23:45:19;;T
2016-04-02 10:10:00;1;1;1;2016-05-13 23:45:19;14.42;T
2016-04-02 10:10:00;1;2;1;2016-05-13 23:45:19;;T
2016-04-02 10:20:00;1;3;1;2016-05-13 23:45:19;14.33;T
2016-04-02 10:20:00;1;1;1;2016-05-13 23:45:19;14.14;T
2016-04-02 10:20:00;1;2;1;2016-05-13 23:45:19;14.06;T
2016-04-02 10:30:00;1;3;1;2016-05-13 23:45:19;14.42;T
2016-04-02 10:30:00;1;1;1;2016-05-13 23:45:19;14.24;T
2016-04-02 10:30:00;1;2;1;2016-05-13 23:45:19;14.05;T
2016-04-02 10:40:00;1;3;1;2016-05-13 23:45:19;14.45;T
2016-04-02 10:40:00;1;1;1;2016-05-13 23:45:19;13.98;T
2016-04-02 10:40:00;1;2;1;2016-05-13 23:45:19;13.98;T
2016-04-02 10:50:00;1;3;1;2016-05-13 23:45:19;14.49;T
2016-04-02 10:50:00;1;1;1;2016-05-13 23:45:19;14.42;T
2016-04-02 10:50:00;1;2;1;2016-05-13 23:45:19;14.10;T
2016-04-02 11:00:00;1;3;1;2016-05-13 23:45:19;14.73;T
2016-04-02 11:00:00;1;1;1;2016-05-13 23:45:19;14.54;T

Zum Laden der Daten verwende ich pgAdmin III: Rechtsklick auf die Tabelle DATA.DATA_ORIG im ‘Object Browser’, Auswahl von 'Import…"

Dabei wähle ich folgende Optionen:

  • Format = csv
  • Encoding = UTF8
  • Delimiter = ;

Klick auf Import liefert die folgende Fehlermeldung:


pgAdmin III

An error has occurred:

FEHLER: ungültige Eingabesyntax für Typ timestamp: „2016-04-02 10:10:00“
CONTEXT: COPY DATA_ORIG, Zeile 1, Spalte REFERENCE_TS: „2016-04-02 10:10:00“

OK

Bin für jeden Hinweis dankbar!

Beste Grüsse, Humpe

Ich zeige da immer gerne mit dem Finger auf PGAdmin. Speichere die Datei und lese diese in psql ein, das geht.

test=*# copy "DATA"."DATA_ORIG" from '/home/kretschmer/data.txt' delimiter ';' null '';
COPY 13

ROLLBACK;

SELECT kaffee !

Vielen Dank für den Tipp!

Leider bin ich damit noch nicht am Ziel meiner Träume angekommen…

Zuerst der Versuch, deinen Befehl über pgAdmin III als SQL-Query abzusetzen. Das ergibt folgendes Resultat:

Irgendwoher taucht also so doofes leeres Viereck auf…

In einem zweiten Schritt der Versuch, das über psql zu bewerkstelligen.

Nach dem Start von psql erscheint folgende Warnung:

Fehlermeldung gegoogelt und siehe da, die Hilfe scheint nahe: http://stackoverflow.com/questions/19162055/psql-shell-uses-code-page-850-windows-uses-1252-how-to-solve-change-console-co

Ich öffne also mit Windwostaste+R eine Shell, gebe dort

cmd.exe /c chcp 1252

ein, was zwar die Warnung verschwinden lässt, jedoch wieder eine Fehlermeldung ausspuckt:

FEHLER: ungültige Eingabesyntax für Typ timestamp: „2016-04-02 10:10:00“
KONTEXT: COPY DATA_ORIG, Zeile 1, Spalte REFERENCE_TS: „2016-04-02 10:10:00“

Dasselbe passiert, wenn ich vor dem Start von psql

cmd.exe /c chcp 65001

eingebe…

Was mache ich falsch?

Danke weiterhin für jeden Hinweis!

Guten Morgen!
Da scheinen Whitespaces im String für das Datum zu sein. Du kannst die entweder in der Datei mit einem Editor eliminieren oder du liest die Datei in eine Importtabelle ein so wie sie ist. Die Konvertierung und Formatierung der Felder kannst du dann Postgres mit SQL vornehmen.

Gruß

Uwe

Sieht aus als wäre das eine UTF-8 Datei mit BOM.

Notepad speichert UTF8 (oder Unicode) immer mit BOM. Nimm mal einen anderen Editor bei dem Du auswählen kannst ob die Datei mit oder ohne BOM gespeichert wird und speichere sie damit nochmal.

Danke an castorp und Gisman für’s Mitdenken!

Im Endeffekt war es tatsächlich ein BOM, welches mir das Leben schwer gemacht hat. Einzulesende Datei im UltraEdit öffnen und beim “Speichern unter” die Kodierung “UTF-8 - Ohne BOM” auswählen.

Die grundsätzliche Lösung war, mein Powershell-Script, welches die einzulesenden Daten postgresql-gerecht aufbereitet, mit zwei Zeilen Code anzureichern…

$transformation_zu_ohne_bom = Get-Content $output_file;
[System.IO.File]::WriteAllLines($output_file, $transformation_zu_ohne_bom);

…, welche hier gefunden wurden: http://blogs.candoerz.com/question/89850/using-powershell-to-write-a-file-in-utf-8-without-the-bom.aspx

Hat zwar nichts mehr mit PGAdmin III zu tun, aber hilft vielleicht sonst jemand anderem mal… :slight_smile:

Nochmals Danke an alle Ratgeber!

Beste Grüsse, Humpe