Liquibase はブランチ全体でドロップ インデックスの変更を適切に処理しますが、コードを含むバージョン (ドロップ インデックスの変更) から、壊れたアプリの状態になることを想定していないバージョンに移行するためです。
liquibase を使用すると、変更は互いに完全に独立しており、バージョン管理からも独立しています。liquibase の変更ログは、それぞれが一意の識別子を持つ変更の順序付きリストと考えることができます。更新を行うと、liquibase は各変更を順番にチェックして、実行されているかどうかを確認し、実行されていない場合は実行します。
「バージョン管理」は純粋にコードベースと分岐スキーム内にあり、liquibase は気にしません。
次のような 1.1.0 リリースから始めると想像してください。
1.1.0 を展開すると、顧客データベースは、変更 a、b、および c が実行されたことを認識します。
変更ログ ファイルの最後に新しい変更セットを含む v2.1 があるため、次のようになります。
- 変更する
- 変更 b
- 変更 c
- ×を変える
- y を変更
- z を変更
すべての 2.1 顧客データベースは、a、b、c、x、y、z が適用されていることを認識しています。
インデックスを削除する変更セット d を使用して 1.1.0.1 を作成すると、1.1.0.1 ブランチに次の変更ログが作成されます。
しかし、1.1.0.1 の顧客を 2.1 にアップグレードすると、liquibase は (a,b,c,x,y,z) の定義済み変更セットを (a,b,c,d) の既知の変更セットと比較し、x を実行します。 y、z。すでに実行されている d の変更セットがあることは気にしません。それについては何もしません。
liquibase diff サポートは、ちょっとしたサニティ チェックとして使用でき、「正しい」データベースと比較してインデックスが欠落していることを報告できますが、これは本番環境の展開シナリオでは通常行うことではありません。