比較できるオブジェクト
比べているのは、テーブル名とカラム名だけではない。
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件ずつ選べます。
スキーマの「構造」だけを見る、という線引き
ユーザー・ロール・権限 (GRANT)、テーブルスペースやファイルグループといった物理配置、暗号鍵、レプリケーション設定は、環境ごとに管理されるべきものとして、意図して比較・同期の対象にしていません。
構造を揃える操作が、認証や運用設定にまで波及しない — 本番に向けても安全に使えるための線引きです。
自分のデータベースで、差分の解像度を確かめる。
SQLite は無料・アカウント不要・期限なし。ライセンスを購入すると、MySQL や PostgreSQL などの対応エンジンもすべて使えるようになります。