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:
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.
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.
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…