私は現在のプロジェクトでデータベースの移行にFlyway
を使い始めましたが、とても気に入っています。私は現在、PRODでOracleを使用し、TEST-EnvironmentでDerbyを使用しています。
すぐに、データベース固有のSQLコマンドの問題が発生しました。
ALTER TABLE T1 MODIFY F1 VARCHAR(256);
ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);
。「ベンダーニュートラルALTERテーブル変更列データ型」SQLを作成する方法がわかりません。
Flywayを使用してこの問題に対処するための最良の方法は何ですか?
Flyway.locationsプロパティを使用できます。
テストでは、次のようになります。
flyway.locations=sql/common,sql/derby
および製品内:
flyway.locations=sql/common,sql/Oracle
次に、共通ステートメント(V1__Create_table.sql)を共通のコピーにし、DB固有のステートメント(V2__Alter_table.sql)の異なるコピーをデータベース固有の場所に置くことができます。
私の意見では、さらに良い解決策は、製品とテストで同じDBを使用することです。はい、パフォーマンスは少し低下しますが、一方で、環境間の別の違い(および潜在的なエラーの原因)も排除します。
Oracleとこれらのデスクトップデータベースの一部との間のSQLの違いはわずかです。開発者がカスタムコードを挿入して、環境に基づいて実行時にSQLの軽量で動的なストリッピングを実行することは可能ですか(テーブルスペースの指定を削除するなど)?
私は、各開発者が2セットのSQLの同期を手動で維持することに依存するよりも、このアプローチを好みます。