データ移行を実行し、その結果を検証する必要があるとします。あるいは開発用データベースとステージング環境のコピーを比較しているのかもしれません。または、同僚が共有データベースの自分のバージョンを送ってきて、その違いを見つける必要があるのかもしれません。いずれの場合も、やることは同じです。2つのSQLiteデータベースを見て、何が変わったのかを突き止めることです。Macでは、ほとんどのツールが単一のデータベース接続を前提に設計されているため、これが驚くほど難しくなっています。
データベースの比較が通常は苦痛である理由
sqlite3のCLIで2つのデータベースを比較するには、2つのターミナルウィンドウを開き、それぞれで同じクエリを実行し、出力を目視で確認して違いを探すことになります。小さなテーブルであればこれでも機能します。しかし何百行、何十列もあるテーブルでは、ミスが起こりやすく時間もかかります。並べて表示する機能も、差分をハイライトする機能もなく、あるのはただ2つのプレーンテキストの流れだけです。
一方のデータベースをもう一方に変換するために必要なSQL文を出力するコマンドラインツール、sqldiffを使う開発者もいます。スクリプト化された比較には強力ですが、出力されるのは生のSQLであり、ビジュアルな差分ではありません。実際に何が変わったのかを理解するには、データそのものを見るのではなく、INSERT、UPDATE、DELETE文を読み解く必要があります。
ほとんどのGUIデータベースブラウザは、一度に1つのデータベースしかサポートしないことで、この問題をさらに悪化させています。データベースAを開いて調べ、それを閉じ、データベースBを開いて、データベースAで何を見たかを思い出そうとする——という具合です。複数の接続をサポートするツールもありますが、それぞれに手動での設定が必要になります。
Tomeで両方のデータベースを並べて開く
TomeはドキュメントベースのmacOSアプリであり、各データベースがそれぞれ独自の完全なインターフェースを持つウィンドウで開きます。2つのデータベースを開き、macOSのSplit Viewを使うか、ウィンドウをドラッグして並べて配置しましょう——2つのテキストファイルを比較するのと同じ感覚です。
ビジュアルなスキーマ比較
両方のデータベースを開いた状態で、各ウィンドウのサイドバーを確認しましょう。移行元には、移行先にはないテーブルがあるでしょうか?一方にはあるのに、もう一方にはないインデックスがあるでしょうか?両方のサイドバーを目視で確認するだけで、これらの疑問に即座に答えが出ます。
行単位での比較
両方のウィンドウで同じテーブルを開き、データをスクロールしてみましょう。同じ列で並べ替えれば、行を揃えられます。両方のグリッドを同時に見られる状態にすれば、行数やデータの値の違いが目に見えるようになります。
それぞれ独立してクエリを実行
各ウィンドウにはそれぞれ独自のSQLクエリエディタがあります。両方で同じ集計クエリ——SELECT COUNT(*) FROM users;——を実行し、結果を並べて比較しましょう。より複雑なクエリを書けば、それぞれのデータベースで独立して合計、平均、特定レコードの有無などを確認できます。