2015-10-31 13 views
5

Ich habe ein Python-Skript, das den folgenden Befehl ausführt, um den Inhalt einer CSV-Datei in eine Datenbank zu kopieren:Handle Fehler mit COPY-Befehl bei der Verwendung von PostgreSQL

copy_query = "COPY table_name FROM STDIN DELIMITER '%s' CSV HEADER QUOTE '\"';" % (self.delimiter) 

table_name stellt eine bereits erstellte Tabelle mit bestimmten Typen . Die Daten in der CSV-Datei stimmen nicht immer mit dem Spaltentyp überein. Zum Beispiel könnte die CSV-Datei wie folgt sein:

"row1", 123, "2012-11-11" 
"row2", 346, "2012-11-12" 
"row3", \N, "2012-11-12" 

Wie Sie sehen können, Spalte 2 sollte vom Typ sein int, aber da die Daten auf Zeile 3 nicht mit Typ int überein, schlägt der gesamte Betrieb . Gibt es eine Möglichkeit, diese Reihe vielleicht komplett abzulehnen? Ich würde es vorziehen, mit einem Standardwert des entsprechenden Typs zu füllen, aber es ist auch in Ordnung, die Zeile zu verwerfen. Danke für Ihre Hilfe!

+0

Momentan (mindestens 9.5) PostgreSQL bietet keine Möglichkeit, Zeilen in "COPY" so umzuwandeln oder zu filtern. Die übliche Lösung besteht darin, in eine temporäre/nicht gemeldete Tabelle mit allen "text" -Spalten zu importieren und dann ein 'insert in ... select ...' einzufügen, um es zu transformieren. Siehe viele vorhandene verwandte Antworten. –

+0

Mögliches Duplikat von [NULL-Werte in CSV-Datei nach Postgres kopieren] (http://StackOverflow.com/questions/19034674/copy-null-values-present-in-csv-file-to-postgres) –

Antwort

0

Sie können dies nicht mit dem Befehl COPY tun, aber Sie könnten die Zieltabelle ändern, um NULL für diese numerischen Felder zu akzeptieren.

Verwandte Themen