Paste the old and new schemas and choose a dialect. Review the generated SQL: table and column drops are commented out, and every other statement should be checked before it runs.
Runs locally in your browserPaste the old schema in Before and the new one in After, choose PostgreSQL or MySQL, and press Generate migration. The tool reads the CREATE TABLE statements and writes the ALTER and CREATE statements that move one snapshot to the other.
Everything runs in the browser; no schema text leaves the page. The result is a review draft: statements that can destroy data are written as comments so nothing is executed by accident.
It compares tables and columns: added and removed tables, added and removed columns, type changes, NOT NULL changes and DEFAULT changes. PRIMARY KEY additions, removals and column-set changes are reported too, including table-level PRIMARY KEY (a, b) definitions.
FOREIGN KEY definitions are compared whether they are written on the column (REFERENCES users(id)) or as a table-level constraint (FOREIGN KEY (a, b) REFERENCES parent (x, y)). A new key becomes ADD CONSTRAINT, and a dropped one is commented for review under the constraint name the tool would use.
DROP TABLE, DROP COLUMN and dropped primary or foreign keys are printed as comments under a DESTRUCTIVE marker, because they discard data or constraints that re-running the tool cannot bring back. This page never executes the draft; you decide which lines to enable.
Only CREATE TABLE statements are read. UNIQUE, CHECK and INDEX definitions are not compared, and data changes, renames, views, sequences, triggers, grants and vendor-specific table options are outside the scope. When those definitions were skipped, the draft says so instead of reporting a clean diff.
Test on a staging copy first and generate the schema with a schema-only dump so that data does not hide the diff. PostgreSQL runs most DDL inside a transaction, so BEGIN and ROLLBACK can undo a wrong migration; MySQL commits DDL implicitly, so a mistake there has to be repaired forward.
Adding NOT NULL or a primary key validates or rewrites an existing table and can hold a lock while it does. Check how long that takes on the real table size (PostgreSQL validates NOT NULL with a full scan, MySQL may rebuild the table) and schedule the change instead of running it at peak traffic.