SQL-Schema-Vergleich und Migrationsentwurf

Fügen Sie altes und neues Schema ein und wählen Sie den Dialekt. Prüfen Sie das erzeugte SQL: Tabellen- und Spaltenlöschungen sind auskommentiert, alle übrigen Anweisungen sollten vor der Ausführung kontrolliert werden.

Läuft lokal in deinem Browser
Dieses Werkzeug verarbeitet alle Daten lokal in deinem Browser.
Schema-SnapshotsFügen Sie altes und neues CREATE-TABLE-SQL ein.
MigrationsentwurfDestruktive Aktionen bleiben zur Prüfung auskommentiert.
Führe das Werkzeug aus, um das lokal verarbeitete Ergebnis hier anzuzeigen.

So vergleichen Sie zwei Schema-Snapshots und entwerfen eine Migration

Fügen Sie das alte Schema unter Before und das neue unter After ein, wählen Sie PostgreSQL oder MySQL und klicken Sie auf Migration erzeugen. Das Werkzeug liest die CREATE-TABLE-Anweisungen und schreibt die ALTER- und CREATE-Anweisungen, die einen Snapshot in den anderen überführen.

Alles läuft im Browser; kein Schema-Text verlässt die Seite. Das Ergebnis ist ein Prüfentwurf: Anweisungen, die Daten zerstören können, stehen als Kommentar, damit nichts versehentlich ausgeführt wird.

  1. Fügen Sie das aktuelle Schema unter Before ein oder nehmen Sie es aus einem Schema-Dump (pg_dump --schema-only oder mysqldump --no-data).
  2. Fügen Sie das Ziel-Schema unter After ein oder führen Sie den Dump nach der gewünschten Änderung erneut aus.
  3. Wählen Sie den Dialekt des Servers, auf dem die Migration laufen soll, und klicken Sie auf Migration erzeugen.
  4. Lesen Sie zuerst die Befundliste: Ergänzungen, Änderungen und destruktive Punkte stehen getrennt, und die destruktiven Anweisungen bleiben im Entwurf auskommentiert.
  5. Kopieren oder laden Sie schema-migration.sql, führen Sie sie auf einer Staging-Kopie in einer Transaktion aus, wo die Engine das unterstützt, und erst danach in der Produktion.

Was der Entwurf abdeckt, was kommentiert bleibt und was er überspringt

Was der Entwurf erkennt

Verglichen werden Tabellen und Spalten: hinzugefügte und entfernte Tabellen und Spalten, Typänderungen, NOT-NULL-Änderungen und Änderungen des Standardwerts. Auch Primärschlüssel werden gemeldet, wenn sie hinzukommen, entfallen oder andere Spalten umfassen, einschließlich Definitionen auf Tabellenebene wie PRIMARY KEY (a, b).

Fremdschlüssel werden verglichen, egal ob sie an der Spalte stehen (REFERENCES users(id)) oder als Tabellen-Constraint (FOREIGN KEY (a, b) REFERENCES parent (x, y)). Ein neuer Schlüssel wird zu ADD CONSTRAINT, ein entfernter bleibt mit dem erzeugten Constraint-Namen als Kommentar stehen.

Was kommentiert bleibt und was fehlt

DROP TABLE, DROP COLUMN sowie entfernte Primär- und Fremdschlüssel werden unter einem DESTRUCTIVE-Hinweis als Kommentar ausgegeben, weil sie Daten oder Constraints verwerfen, die ein erneuter Lauf nicht zurückholt. Diese Seite führt nichts aus; Sie entscheiden, welche Zeilen aktiv werden.

Gelesen werden nur CREATE-TABLE-Anweisungen. UNIQUE-, CHECK- und INDEX-Definitionen werden nicht verglichen, und Datenänderungen, Umbenennungen, Views, Sequences, Trigger, Rechte sowie herstellerspezifische Tabellenoptionen liegen außerhalb des Umfangs. Wurden solche Definitionen übersprungen, sagt der Entwurf das, statt einen sauberen Diff zu melden.

Den Entwurf sicher ausführen

Testen Sie zuerst auf einer Staging-Kopie und erzeugen Sie das Schema mit einem reinen Schema-Dump, damit Daten den Diff nicht verdecken. PostgreSQL führt fast alles DDL in einer Transaktion aus, BEGIN und ROLLBACK können eine falsche Migration also zurücknehmen; MySQL bestätigt DDL implizit, dort muss ein Fehler nach vorn korrigiert werden.

NOT NULL oder ein Primärschlüssel zu ergänzen validiert oder schreibt eine bestehende Tabelle neu und kann dabei eine Sperre halten. Prüfen Sie die Dauer an der echten Tabellengröße (PostgreSQL validiert NOT NULL mit einem vollen Scan, MySQL baut die Tabelle möglicherweise neu auf) und planen Sie die Änderung, statt sie zur Spitzenzeit auszuführen.

Zuletzt verwendet: