CodeGym /Kurse /SQL SELF /Typische Fehler beim Bulk-Import von Daten

Typische Fehler beim Bulk-Import von Daten

SQL SELF
Level 24 , Lektion 4
Verfügbar

Bulk-Import von Daten in PostgreSQL ist wie Tetris zocken: Alle Teile (Daten) müssen perfekt in die vorhandene Tabelle (Datenbankstruktur) passen. Aber wie bei Games gibt’s oft Fehler, die den Prozess verlangsamen oder sogar komplett crashen lassen. Du kannst auf Probleme wie falsche Datentypen, Encoding-Issues, doppelte Einträge oder auch mal auf unerwartete Zugriffsrechte-Fehler stoßen.

Welche Fehler gibt’s genau, wie erkennt man sie und wie kann man sie verhindern? Heute schauen wir uns die häufigsten Probleme im Detail an, damit du ein echter Bulk-Import-Profi wirst.

Fehler bei der Datenstruktur

Probleme mit Datentypen

Sehr oft siehst du beim Import sowas wie:

ERROR:  ungültige Eingabesyntax für Typ integer: "abc"
CONTEXT:  COPY students, Zeile 3, Spalte age: "abc"

Das passiert, wenn die Daten in deiner CSV-Datei nicht zum erwarteten Spaltentyp passen. Zum Beispiel, wenn in der Spalte age eine Zahl erwartet wird, aber im Datensatz steht "abc". PostgreSQL weiß dann nicht, wie es Text in eine Zahl umwandeln soll, und der Import wird abgebrochen.

Wie vermeiden?

  1. Check deine CSV-Datei vor dem Import. Wenn du mit Excel oder Python arbeitest, stell sicher, dass alle Spalten die richtigen Typen haben.
  2. Falls trotzdem Fehler auftauchen, kannst du die Daten erstmal in eine Zwischentabelle mit allen Spalten als TEXT laden und dann umwandeln:
UPDATE temp_students
SET age = CAST(age AS INTEGER)
WHERE age ~ '^\d+$';

Fehlende Spalten

Wenn die Tabellenstruktur nicht zu den Daten in der CSV passt, gibt PostgreSQL einen Fehler aus. Zum Beispiel:

ERROR:  fehlende Daten für Spalte "email"
CONTEXT:  COPY students, Zeile 2: "John,Doe,21"

Das passiert meistens, wenn die Header (oder die Reihenfolge der Spalten) in der CSV-Datei anders sind als in der Tabelle.

Wie vermeiden? Gib bei COPY immer die Spalten explizit an, die du befüllen willst:

COPY students (first_name, last_name, age)
FROM '/path/to/file.csv' 
DELIMITER ',' 
CSV HEADER;

Encoding-Fehler

Probleme mit verschiedenen Encodings

Wenn deine CSV-Datei in einem anderen Encoding als UTF-8 gespeichert wurde (z.B. Windows-1251), kann PostgreSQL die Datei nicht lesen. Das führt zu Fehlern, vor allem wenn kyrillische Zeichen drin sind:

ERROR:  ungültige Byte-Sequenz für Encoding "UTF8": 0xd0
CONTEXT:  COPY students, Zeile 1

Wie vermeiden?

  1. Stell sicher, dass deine CSV-Datei in UTF-8 gespeichert ist.
  2. Falls das nicht geht, gib das Encoding beim Import an:
COPY students FROM '/path/to/file.csv'
DELIMITER ',' 
CSV HEADER 
ENCODING 'WIN1251';

Dateizugriffs-Fehler

Probleme mit Zugriffsrechten

Wenn du COPY benutzt, muss PostgreSQL Zugriff auf die Datei haben, die du importierst. Wenn die Datei nicht erreichbar ist, bekommst du sowas:

ERROR:  konnte Datei "/path/to/file.csv" nicht zum Lesen öffnen: Permission denied

Oder auch:

ERROR:  Datei oder Verzeichnis nicht gefunden

Wie vermeiden?

  1. Check, ob PostgreSQL Zugriff auf die Datei hat. Unter Linux kann das an den Rechten liegen. Gib mit chmod die Rechte frei:
    chmod 644 /path/to/file.csv
    
  2. Wenn du lokal arbeitest, nutz \COPY statt COPY.

Probleme mit doppelten Daten

Wenn du Daten in Tabellen mit UNIQUE-Constraint (z.B. eindeutige IDs) importierst, kann es zu Konflikten kommen:

ERROR:  doppelter Schlüsselwert verletzt Unique-Constraint "students_pkey"
DETAIL:  Schlüssel (id)=(1) existiert bereits.

Das passiert, wenn in der CSV doppelte Einträge sind oder die Daten schon in der Tabelle stehen.

Wie vermeiden?

  1. Benutz die Option ON CONFLICT, um doppelte Werte zu behandeln:
    INSERT INTO students (id, first_name, last_name)
    VALUES (1, 'John', 'Doe')
    ON CONFLICT (id) DO NOTHING;
    
  1. Wenn du COPY oder \COPY nutzt, lade die Daten erstmal in eine Zwischentabelle und füge sie dann mit Duplikat-Handling in die Haupttabelle ein.

Fehler bei leeren Werten

In PostgreSQL dürfen Spalten mit NOT NULL-Constraint keine leeren Werte haben. Wenn in deiner CSV leere Spalten sind, bekommst du diesen Fehler:

ERROR:  NULL-Wert in Spalte "email" verletzt Not-Null-Constraint

Wie vermeiden?

  1. Stell sicher, dass die CSV für alle Pflichtspalten Werte enthält.
  2. Wenn leere Werte okay sind, entferne das NOT NULL-Constraint oder setze einen Default-Wert:
ALTER TABLE students ALTER COLUMN email SET DEFAULT 'unbekannt@example.com';

Fehler beim Logging

Fehlende Fehler-Infos

Wenn du große Dateien importierst, ist es wichtig, Fehler zu loggen. Leider bietet COPY standardmäßig keine Logging-Mechanismen.

Wie vermeiden? Richte ein Fehler-Logging mit einer separaten Tabelle ein. Zum Beispiel: Erstelle eine Fehler-Tabelle und leite fehlerhafte Zeilen dorthin um:

COPY students FROM '/path/to/file.csv'
DELIMITER ',' 
CSV HEADER
LOG ERRORS INTO error_log
REJECT LIMIT 100;

Zusammenfassung zur Fehlervermeidung

  1. Analysiere und prüfe die Daten immer vor dem Import.
  2. Nutze temporäre Tabellen für die Vorverarbeitung.
  3. Schalte Fehler-Logging ein und analysiere die Fehler.
  4. Bei Konflikten oder Unstimmigkeiten nutze ON CONFLICT oder lade in Zwischentabellen.
  5. Check das Encoding der Dateien und passe die Server-Settings an.

Bulk-Import von Daten kann tricky sein, aber mit dem richtigen Ansatz bekommst du das schnell, zuverlässig und effizient hin. Willst du deine neuen Skills testen? Versuch mal, eine große CSV-Datei in eine Testdatenbank zu laden und schau, ob alles korrekt importiert wurde!

2
Aufgabe
SQL SELF, Level 24, Lektion 4
Gesperrt
Lösung des Problems mit doppelten Einträgen
Lösung des Problems mit doppelten Einträgen
1
Umfrage/Quiz
Optimierung von Massenimport, Level 24, Lektion 4
Nicht verfügbar
Optimierung von Massenimport
Optimierung von Massenimport
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION