Download the PHP package ngyuki/dbdatool without Composer
On this page you can find all versions of the php package ngyuki/dbdatool. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ngyuki/dbdatool
More information about ngyuki/dbdatool
Files in ngyuki/dbdatool
Package dbdatool
Short Description Database diff/apply tool.
License MIT
Homepage https://github.com/ngyuki/dbdatool
Informations about the package dbdatool
dbdatool
database diff/apply tool.
稼働集のデータベースからスキーマ定義ファイルをダンプし、その定義と別のデータベースを比較して差分を ALTER TABLE などの SQL の形で表示したり、差分をデータベースへ適用したりするマイグレーションツールです。
dbdatool dump > schema.json でデータベースからスキーマ定義ファイルを出力します。dbdatool apply schema.json で schema.json に書かれたスキーマ定義とデータベースを比較して差分を ALTER TABLE などで適用します。
Demo
Install
You can download phar file, see https://github.com/ngyuki/dbdatool/releases
簡単な使い方
config.php にデータベース接続情報を記述します。
composer.json にコンフィグのパスを追記します。
データベースからスキーマ定義ファイルを出力します。
スキーマ定義ファイルとデータベースを比較して差分を表示します。
差分をデータベースに適用します。
dbdatool dump
動いているデータベースからスキーマ定義ファイルをダンプします。
source にはダンプ元のデータソースを指定します。省略すれば @ で、これはコンフィグで指定されたデータベースです。
dbdatool diff
2 つのデータソースを比較して、差分を ALTER TABLE などの SQL で表示します。
target を source に一致させるための差分が表示されます。例えば target のみにテーブルが存在すれば DROP TABLE されます(直感の逆になっているかも)。
target は省略可能です。省略すれば @ で、これはコンフィグで指定されたデータベースです。つまりデータソースをひとつだけ指定した場合は「コンフィグのデータベースを、指定したデータソースのスキーマ定義に一致させるための DDL」が表示されます。
dbdatool apply
2 つのデータソースを比較して、差分を実際にデータベースへ適用します。
source の定義を target に差分で反映させます。
target は省略可能です。省略すれば @ で、これはコンフィグで指定されたデータベースです。つまりデータソースをひとつだけ指定した場合は「指定したデータソースのスキーマ定義を、コンフィグのデータベース反映」します。
コンフィグファイルの指定
コンフィグファイルは -c|--config オプションで指定するか、オプションで指定しない場合は変わりに composer.json で次のように指定できます。
この場合 dbdatool.php があればそれを、なければ dbdmtool.php.dist が使用されます。
データソースの指定
コマンドで指定するデータソース(データベースやスキーマ定義ファイル)は、下記のいずれかの形式で指定できます。
例えば次のように指定します。
一部のコマンドでは指定できるデータソースに制限があります。例えば apply コマンドの2番目のデータソース(target)には実際のデータベース接続を伴うデータソースを指定する必要があるため、スキーマ定義ファイルや空のデータソースを指定することはできません。
よくある使い方
データベースのスキーマは生の SQL の CREATE TABLE などの DDL で管理しており init.sql にテーブル・インデックス・外部キー制約を作るための SQL が保存されています。
config.php は次のように環境変数を元にデータベース接続情報を返します。
composer.json でコンフィグのファイルパスを指定します。
開発中にスキーマ定義に変更があるときは最初に init.sql を修正します。
init.sql を適当なデータベースにインポートします。
スキーマ定義ファイルをダンプします。
実際のデータベースとの差分を確認して適用します。
Git リポジトリに追加・コミット・プッシュします。
他の開発者は git pull の後にスキーマ定義の変更を適用できます。
制限
スキーマ定義の比較は非常に雑に行っています。
例えば MySQL では boolean は tinyint のエイリアスですが、スキーマ定義に boolean と記述すると実際のデータベースとの比較で tinyint とは異なるため差分が検出されます。boolean の差分を適用したとしても実際のデータベースでは tinyint なので、スキーマ定義に boolean が書かれていると何度 apply しても差分が出続けます。
このような自体を避けるためにスキーマ定義ファイルは手書きせず dump で稼働中のデータベースから出力することをオススメします。