Liquibase を使用して、Oracle DB スキーマを管理しています。また、統合テストには HSQL DB を使用します。Liquibase を使用して HSQL スキーマも構築したいと考えています (現在は Java からプログラムで構築されているため、このインスタンスでトリガーするために Liquibase Java API を使用しています)。
コンテンツが変更されるたびに、liquibase 移行の最後に実行されるいくつかのビュー changeSet があります。
<changeSet id="VIEW_1" author="A1" runOnChange="true">
<createView viewName="VIEW_1" replaceIfExists="true">
SELECT ...
HSQL DB の Liquibase は をサポートしていないためreplaceIfExists
、このアプローチは失敗します。
いくつかのオプションを見ることができますが、それらはすべて醜いです。誰かがより良いアプローチを見つけましたか?
各ビューが存在する場合は削除してから、移行のたびに作成します。これは機能しますが、小さな変更でも膨大な量の冗長 SQL が作成され、破損し
runOnChange
ます。HSQL DB と Oracle に重複した changeSet を使用します - Oracle は and を使用
replaceIfExists
しrunOnChange
、HSQL DB は最初のパターンに従います - 存在する場合はドロップしてから作成します。これは、ビュー ロジックを複製することを意味します。Liquibase コードを調べて
replaceIfExists
、HSQL DB でのサポートを試みます。Liquibase は、それを処理するために基礎となる DB に依存するのではなく、ドロップ ビュー コマンドを発行できます。いいけど時間がない!