CLI: CSV Import nach PostgreSQL

edit | delete

Autor: Ingmar Pforr

eingetragen: Donnerstag, 08. April 2010 um 16:40 Uhr (14/2010 Kalenderwoche)

geändert: Montag, 08. April 2013 um 18:29 Uhr (15/2013 Kalenderwoche)

Keywords: CLI CSV Import nach PostgreSQL (psql CLI Windows)

Kategorien: DB: PostgreSQL, Windows, UTF-8 / ISO,

Text:

(umgezogen auf https://wiki.zadi.de/wiki/PostgreSQLCSVImport)


Alternativen:
COPY kann auch in pgAdmin als SQL Statement ausgeführt werden, benötigt aber einen PostgreSQL superuser


Voraussetzung:
CSV Datei ist Komma-getrennt (modifizierbar, s.u.)
CSV Datei ist ASCII (weil ASCII=UTF8 abwährtskompatibel) oder UTF8 ohne Byte order mark (BOM)
(modifizierbar, siehe client_encoding)


cmd starten
Aufruf siehe Quellcode


Ein anderer Delimiter (Semikolon oder Tabulator statt Komma) und das Mapping von Überschriften in der ersten Zeile auf Datenbank-Spalte kann gesetzt werden (siehe Delimiter und Header):
http://www.postgresql.org/docs/8.2/static/sql-copy.html


Bei Daten mit Umlauten etc. muss dann in Excel unter "Unicode-Text" gespeichert werden, bei Delimiter wird Tabulator verwendet. Evtl. muss z.B. in Notepad++ der Zeichensatz von UTF16 auf UTF8 geändert werden.

Quellcode:  

Beispiel csv 1:1 ohne header
cd C:\Programme\PostgreSQL\8.1\bin\
psql.exe  -c "COPY lu_melderegion FROM stdin CSV" -h grolsch.zadi.de -p 5432 meldfleisch "meldfleisch" < "C:\Dokumente und Einstellungen\ip\Desktop\melderegion2.csv"

Beispiel
nur bestimmte Zielspalten in bestimmter Reihenfolge (Spaltenamen in Klammern nach Tabellennamen)
Tab als Delimiter (von Excel)
erste Zeile ignorieren (HEADER)
psql.exe  -c "COPY lu_handelsbez (handelsbez_3alpha_code,handelsbez_scient_name,handelsbez_handelsbez)FROM stdin delimiter E'\t' CSV header" -h pgdev.zadi.de -p 5432 iuu-backend "iuu-backend" < "C:\temp2\hbz.txt"