「DBのスキーマだけじゃなくて、データそのものにも Git みたいにブランチ切れたら楽なのに」——PostgreSQL でマイグレーションを運用していると、一度はそう思ったことがあるんじゃないでしょうか。
DoltgreSQL
は、まさにそれを実現するデータベースです。PostgreSQL 互換のワイヤプロトコルを持ちながら、内部では Git
ライクなバージョン管理エンジンが動いていて、SQL だけで branch / merge / diff が全部できます。本記事では、インストールから基本的なブランチ操作まで試した感想をまとめます。
DoltgreSQL とは
DoltgreSQL は、DoltHub が開発しているオープンソースのデータベースです。もともと MySQL 互換の Dolt というバージョン管理 DB があり、その PostgreSQL 版として開発されました。
主な特徴:
- Git のように branch / merge / diff / clone ができるリレーショナル DB
- 標準の PostgreSQL クライアント(
psql、pgAdmin 等)でそのまま接続可能 - バージョン管理操作はすべて SQL 関数・プロシージャ経由
- 2025年4月から Beta ステータス
なぜ面白いのか
1. データにもブランチワークフローが使える
コードには当たり前にブランチを切るのに、データベースの変更は一発勝負——という状況はよくあります。DoltgreSQL なら:
- 本番 DB をブランチ → ステージングで変更適用 → テスト → マージ
- データの「プルリクエスト」的な運用で、変更をレビューしてからマージ
- スキーマだけでなく データそのものに diff が取れる
Supabase のマイグレーション で苦労した経験があると、この仕組みのありがたみがわかります。
2. AI エージェントとの相性
最近 AI エージェントから DB を操作する ユースケースが増えていますが、エージェントに本番 DB を直接触らせるのは怖い。DoltgreSQL なら:
- エージェントがブランチ上で書き込み → 人間がレビューしてマージ
- 破壊的変更のリスクを branch isolation で軽減
- 問題があれば
DOLT_RESETで簡単にロールバック
3. PostgreSQL 互換
既存のアプリケーションや ORM をほぼそのまま使えます。sqllogictest ベンチマークでは 569 万テスト中 519 万テストが通過(91.17% の互換性)。完璧ではないですが、多くのユースケースで十分な互換性です。
インストール
Linux / macOS
インストールスクリプトが用意されています。バイナリをダウンロードして PATH に配置する仕組みです。
| |
Docker で試す
手っ取り早く試すなら Docker が楽です。以下のコマンドで DoltgreSQL サーバが起動し、ポート 5432 で待ち受けます。
| |
サーバの起動(バイナリの場合)
バイナリでインストールした場合は doltgres コマンドでサーバを起動します。
| |
デフォルトでは ~/.doltgres/databases 配下にデータが保存されます。環境変数でカスタマイズ可能です:
DOLTGRES_DATA_DIR— データ保存先DOLTGRES_USER— スーパーユーザ名(デフォルト:postgres)DOLTGRES_PASSWORD— パスワード(デフォルト:password)
接続
起動したら psql で普通に接続できます。
| |
接続すると、普通の PostgreSQL のように見えます。ここから先がバージョン管理の世界です。
基本操作: ブランチ / コミット / マージ
DoltgreSQL のバージョン管理操作はすべて SQL で行います。Git コマンドとの対応を意識しながら見ていきましょう。
テーブルの作成とコミット
まず、普通にテーブルを作ってデータを入れます。
| |
ここまでは普通の PostgreSQL と同じです。次に、この変更をコミットします。Git の git add -A && git commit に相当します。
| |
ブランチを切る
新しいブランチを作成して切り替えます。Git の git checkout -b と同じ感覚です。
| |
ブランチ上でスキーマとデータを変更します。
| |
変更をコミットします。
| |
diff で変更を確認
main ブランチとの差分を確認します。DOLT_DIFF テーブル関数を使うと、行単位で何が変わったか見えます。
| |
スキーマの差分だけ見たい場合は DOLT_SCHEMA_DIFF が便利です。
| |
マージ
問題なさそうなら main に戻ってマージします。
| |
コンフリクトが発生した場合は DOLT_CONFLICTS テーブルで確認できます。事前にコンフリクトの有無を確認するには:
| |
コミット履歴の確認
dolt.log でコミット履歴を確認できます。Git の git log に相当します。
| |
ステータスの確認
未コミットの変更を確認するには dolt.status を使います。git status と同じ感覚です。
| |
現実的な制約
正直に書いておくと、制約もそれなりにあります。
| 項目 | 状況 |
|---|---|
| パフォーマンス | PostgreSQL 比で約 5.2x のオーバーヘッド(read 6.3x / write 3.6x) |
| ステータス | Beta(2025年4月16日〜)。本番利用は可能だがバグの可能性あり |
| エクステンション | 未対応(PostGIS 等は使えない) |
| レプリケーション | 未対応(開発中) |
| DoltHub/DoltLab 連携 | 未対応(S3・ファイルシステムなどカスタムリモートは可) |
| CLI バージョン管理 | SQL 経由のみ(dolt CLI は使えない) |
パフォーマンスの 5.2x オーバーヘッドは気になるところですが、ステージング環境や設定データの管理など、スループットが最優先ではないユースケースなら許容範囲だと思います。PgDog のようなプロキシ を前段に置くような高スループットの用途には向きません。
どんな人に向いているか
- DB マイグレーションの安全性を高めたいチーム
- データの変更履歴を完全に追跡したいプロジェクト(監査要件がある場合など)
- AI エージェントに DB 操作をさせたいが、安全ネットが欲しいケース
- 設定データや ML feature store のバージョン管理
どんな人には向かないか
- 高いクエリ性能が最優先のプロダクション OLTP
- PostgreSQL エクステンション(PostGIS 等)に依存しているプロジェクト
- すでに Liquibase / Flyway 等でマイグレーション管理が十分回っているチーム
まとめ
DoltgreSQL は「データベースに Git のワークフローを持ち込む」という、ありそうでなかったアプローチのプロダクトです。
正直、パフォーマンスの 5.2x オーバーヘッドや Beta ステータスを考えると、今すぐ本番の OLTP に投入するのは厳しい。ただ、ステージング環境でのマイグレーション検証、AI エージェントの書き込みを安全にレビューするワークフロー、設定データのバージョン管理——こういった用途ではかなり強力です。
個人的に一番面白いと思ったのは、DOLT_DIFF でデータの行レベル差分が SQL で取れるところ。スキーマの diff はツールがあるけれど、「この行のこの値が変わった」を追跡できるのは他にはなかなかない。
PostgreSQL 互換率 91% という数字が示すとおり、まだ完全ではないですが、開発は活発に進んでいます。興味がある方はまず Docker で試してみてください。
