Du exportierst eine Datenbank, willst sie in eine frische Instanz laden, und MySQL wirft:
Oder bei PostgreSQL:
DETAIL: Key (user_id)=(42) is not present in table "users".
Warum das passiert
Ein Foreign Key sagt: „Jede orders.user_id muss auf eine existierende users.id zeigen.“ Wenn der Dump orders vor users einfügt, existiert die referenzierte Elternzeile noch nicht — die Datenbank lehnt die Zeile ab.
Die meisten Dump-Tools schreiben Tabellen alphabetisch oder in Erstellungsreihenfolge — nicht nach Foreign-Key-Abhängigkeit. Deshalb landet orders (Kind) oft vor users (Eltern), und der Import scheitert.
Lösung 1: INSERTs nach Abhängigkeit sortieren (die saubere Lösung)
Die korrekte Lösung: jede Elterntabelle vor ihren Kindtabellen einfügen. Dazu werden die Foreign Keys in einen Abhängigkeitsgraphen aufgelöst und die Tabellen in topologischer Reihenfolge geladen: users → orders → order_items.
Von Hand in einer mehrere Gigabyte großen Datei ist das mühsam — du musst jeden FOREIGN KEY über CREATE TABLE und ALTER TABLE hinweg nachverfolgen und riesige INSERT-Blöcke in die richtige Reihenfolge kopieren.
Lösung 2: Foreign-Key-Prüfung beim Import deaktivieren
Bei einem vollständigen, bereits konsistenten Dump kannst du die Validierung beim Laden gefahrlos überspringen. Bei MySQL umschließt du die Datei:
-- MySQL SET FOREIGN_KEY_CHECKS = 0; -- ... alle INSERT-Statements ... SET FOREIGN_KEY_CHECKS = 1;
Bei PostgreSQL verzögerst du die Constraints innerhalb einer Transaktion:
-- PostgreSQL BEGIN; SET CONSTRAINTS ALL DEFERRED; -- ... alle INSERT-Statements ... COMMIT;
Aktiviere die Prüfung danach wieder, damit künftige Schreibvorgänge validiert bleiben. Das funktioniert, kaschiert aber nur das Reihenfolge-Problem — bei einem unvollständigen Dump können verwaiste Zeilen entstehen.
Lösung 3: Beides automatisch mit DumpCleaner
DumpCleaner liest den Dump, extrahiert jeden Foreign Key aus CREATE TABLE und ALTER TABLE, baut den Abhängigkeitsgraphen und exportiert eine saubere Datei, die einfach importiert:
- Zieh deinen
.sql-Dump in DumpCleaner (MySQL, MariaDB, PostgreSQL, SQLite oder MS SQL). - Wähle INSERT-Reihenfolge → Nach Abhängigkeiten (FK-aware). Eltern werden per topologischer Sortierung automatisch vor Kinder gesetzt.
- Optional Foreign-Key-Prüfung deaktivieren anhaken — die Ausgabe wird mit dem passenden Statement deiner Datenbank umschlossen.
- Exportieren. Die neue Datei importieren — der Constraint-Fehler ist weg.
Zirkuläre Foreign Keys erkennt DumpCleaner ebenfalls und warnt dich, statt eine unmögliche Reihenfolge zu erzeugen.
Kein manuelles INSERT-Gefummel mehr
DumpCleaner sortiert INSERTs nach Foreign-Key-Abhängigkeit — bei Dateien jeder Größe, streamend und mit konstantem Speicherverbrauch. Native macOS- & iPadOS-App, Einmalkauf.
Im App Store ladenHäufige Fragen
Warum tritt „a foreign key constraint fails“ beim Import auf?
Eine Kindzeile verweist auf eine Elternzeile, die noch nicht eingefügt wurde, weil der Dump die INSERTs alphabetisch oder nach Erstellungszeit sortiert statt nach Foreign-Key-Abhängigkeit.
Ist es sicher, die Foreign-Key-Prüfung beim Import zu deaktivieren?
Ja, bei einem vollständigen und konsistenten Dump. Du überspringst nur die Validierung von Daten, die in der Quelldatenbank bereits gültig waren. Danach die Prüfung wieder aktivieren.
Wie sortiere ich INSERTs, ohne die Datei von Hand zu bearbeiten?
DumpCleaner erkennt Foreign Keys, baut einen Abhängigkeitsgraphen und exportiert die INSERTs in topologischer Reihenfolge — Eltern laden immer vor Kindern.
Funktioniert das auch für PostgreSQL?
Ja. DumpCleaner unterstützt pg_dump-Ausgaben und kann sowohl SET CONSTRAINTS ALL DEFERRED als auch abhängigkeitssortierte INSERTs erzeugen.
Dumps importieren ohne FK-Kopfschmerzen
Ziehen, nach Abhängigkeiten sortieren, exportieren. DumpCleaner kümmert sich um die Foreign Keys, damit dein Import einfach läuft.
Im App Store laden