変更前と変更後のスキーマを貼り付け、ダイアレクトを選びます。生成された SQL を確認してください。テーブルと列の削除はコメント化され、その他の文も実行前に確認が必要です。
ブラウザ内でローカルに実行変更前のスキーマを Before に、変更後を After に貼り付け、PostgreSQL か MySQL を選んで「マイグレーションを生成」を押します。CREATE TABLE 文を読み取り、一方のスナップショットをもう一方へ移す ALTER 文と CREATE 文を書き出します。
処理はすべてブラウザー内で完結し、スキーマのテキストはページ外へ送信されません。結果はレビュー用の下書きで、データを壊しうる文はコメントとして出力されるため、誤って実行されることはありません。
テーブルと列を比較します。テーブルと列の追加・削除、型の変更、NOT NULL の変更、既定値の変更を検出します。主キーの追加・削除・対象列の変更も報告し、PRIMARY KEY (a, b) のようなテーブル レベル定義にも対応します。
外部キーは、列に直接書かれた REFERENCES users(id) でも、テーブル制約の FOREIGN KEY (a, b) REFERENCES parent (x, y) でも比較します。追加されたキーは ADD CONSTRAINT になり、削除されたキーは生成される制約名とともにコメントとして残ります。
DROP TABLE、DROP COLUMN、削除された主キーと外部キーは DESTRUCTIVE の印を付けてコメントで出力します。これらはデータや制約を破棄し、再実行しても元に戻せないためです。このページは下書きを実行しません。有効にする行は利用者が選びます。
読み取るのは CREATE TABLE 文だけです。UNIQUE・CHECK・INDEX 定義は比較せず、データ変更、リネーム、ビュー、シーケンス、トリガー、権限、エンジン固有のテーブル オプションも対象外です。これらの定義を飛ばした場合は、差分なしと報告する代わりにその旨を下書きに明記します。
まずステージングで試し、スキーマはスキーマだけのダンプから用意してデータで差分が隠れないようにします。PostgreSQL はほとんどの DDL をトランザクション内で実行できるため BEGIN と ROLLBACK で誤ったマイグレーションを取り消せますが、MySQL は DDL を暗黙に確定するため誤りは前に進めて直す必要があります。
NOT NULL や主キーの追加は既存テーブルを検証または再構築し、その間ロックを保持することがあります。実際のテーブル サイズでの所要時間を確認し(PostgreSQL は NOT NULL を全走査で検証し、MySQL はテーブルを再構築する場合があります)、ピーク時間帯を避けて計画してください。