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!
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. –
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) –