SQL スキーマ差分とマイグレーション下書き

変更前と変更後のスキーマを貼り付け、ダイアレクトを選びます。生成された SQL を確認してください。テーブルと列の削除はコメント化され、その他の文も実行前に確認が必要です。

ブラウザ内でローカルに実行
このツールの処理はすべてブラウザ内で行われます。KivTools が入力内容をアップロード・保存したり、外部 API に送信したりすることはありません。
スキーマ スナップショット旧と新の CREATE TABLE SQL を貼り付けてください。
マイグレーション下書き破壊的な操作は確認用にコメントアウトされています。
ツールを実行すると、ローカルで処理した結果がここに表示されます。

2 つのスキーマ スナップショットを比較してマイグレーションを下書きする手順

変更前のスキーマを Before に、変更後を After に貼り付け、PostgreSQL か MySQL を選んで「マイグレーションを生成」を押します。CREATE TABLE 文を読み取り、一方のスナップショットをもう一方へ移す ALTER 文と CREATE 文を書き出します。

処理はすべてブラウザー内で完結し、スキーマのテキストはページ外へ送信されません。結果はレビュー用の下書きで、データを壊しうる文はコメントとして出力されるため、誤って実行されることはありません。

  1. 現在のスキーマを Before に貼り付けます。スキーマだけのダンプ(pg_dump --schema-only / mysqldump --no-data)から取ると確実です。
  2. 目標のスキーマを After に貼り付けるか、適用したい変更の後に同じダンプを再実行します。
  3. マイグレーションを実行するサーバーのダイアレクトを選び、「マイグレーションを生成」を押します。
  4. まず検出一覧を確認します。追加・変更・破壊的項目は分けて表示され、破壊的な文は下書き内でコメントのまま残ります。
  5. schema-migration.sql をコピーまたはダウンロードし、対応しているエンジンではトランザクション内でステージングに実行し、その後で本番に適用します。

下書きが扱う範囲、コメントとして残るもの、対象外のもの

下書きが検出するもの

テーブルと列を比較します。テーブルと列の追加・削除、型の変更、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 はテーブルを再構築する場合があります)、ピーク時間帯を避けて計画してください。

最近使ったツール: