比較できるオブジェクト

比べているのは、テーブル名とカラム名だけではない。

DiffyPick はスキーマを構成するオブジェクトを幅広く読み取り、差分の検出から同期 SQL の生成までを行います。同じ DBMS どうしの比較で対象になるオブジェクトを一覧します。

5方言すべてで比較・同期できるもの

MySQL・MariaDB・PostgreSQL・SQL Server・SQLite のどの方言でも、次のオブジェクトは差分の検出と同期の両方に対応しています。

テーブルとカラム

型・長さ・精度、NOT NULL、デフォルト値、AUTO_INCREMENT / IDENTITY、コメントといった属性の単位で比較します。

主キー・UNIQUE・CHECK 制約

列の構成から制約名、CHECK の条件式まで、定義の中身で突き合わせます。

インデックス

複合インデックスはもちろん、式インデックスや部分 (フィルター付き) インデックスも同一性の判定に含めます。

外部キー

ON UPDATE / ON DELETE の動作まで含めて比較します。検出した親子関係は、同期 SQL を安全な順序に並べるためにも使われます。

ビューとトリガー

定義の差分を検出します。ビューを書き換えるときは、依存するビューの再作成まで自動で組み立てます。

ストアドプロシージャ・関数

MySQL / MariaDB / PostgreSQL / SQL Server で対応します (SQLite にはストアドの仕組み自体がありません)。

方言の「らしさ」も、そのまま比較する

各 DBMS の固有オブジェクトも、同じ方言どうしの比較なら検出・同期の対象です。代表的なものを挙げます。

MySQL

AUTO_INCREMENT、EVENT、パーティション、FULLTEXT / SPATIAL インデックス、INVISIBLE なカラムとインデックス、カラム単位の文字セット・照合順序、ON UPDATE CURRENT_TIMESTAMP など。

MariaDB

MySQL の対応範囲すべてに加えて、SEQUENCE と Application-Time Period (PERIOD FOR) を比較します。

PostgreSQL

シーケンス、ENUM 型、ドメイン、複合型・範囲型、マテリアライズドビュー、パーティション、カスタム照合順序など。

SQL Server

IDENTITY、シーケンス、シノニム、ユーザー定義型、COLUMNSTORE インデックス、INCLUDE 列付きインデックス、主キーの CLUSTERED / NONCLUSTERED など。

SQLite

WITHOUT ROWID・STRICT テーブル、生成列など。PRAGMA からは取得できない CHECK 制約も、テーブル定義 SQL から抽出して比較します。

見つけるだけでなく、揃えるところまで

ここに挙げたオブジェクトは、差分を表示するだけではありません。選んだ差分だけを適用する同期 SQL の生成まで対応しています。

外部キーの親子関係やビューの依存は自動で解決され、SQL は安全に実行できる順序に並びます。適用するものは 1件ずつ選べます。

異種 DBMS 間では、共通する構造に集中

方言が違う 2つの DB を比較するときは、双方に共通して存在する概念 — テーブルとカラムの構造、主キー、外部キー — を型マッピングで変換しながら比較・同期します。

ビューやストアド、シーケンスといったエンジン固有のオブジェクトを、相手の方言へ無理に自動変換することはしません。移行先にだけあるものは差分として提示されるので、残すか消すかを 1件ずつ選べます。

異種 DBMS 間の移行ガイドを見る →

スキーマの「構造」だけを見る、という線引き

ユーザー・ロール・権限 (GRANT)、テーブルスペースやファイルグループといった物理配置、暗号鍵、レプリケーション設定は、環境ごとに管理されるべきものとして、意図して比較・同期の対象にしていません。

構造を揃える操作が、認証や運用設定にまで波及しない — 本番に向けても安全に使えるための線引きです。

自分のデータベースで、差分の解像度を確かめる。

SQLite は無料・アカウント不要・期限なし。ライセンスを購入すると、MySQL や PostgreSQL などの対応エンジンもすべて使えるようになります。