web-dev-qa-db-ja.com

Flywayを使用した「データベース固有の」SQLスクリプトの最良の方法

私は現在のプロジェクトでデータベースの移行にFlywayを使い始めましたが、とても気に入っています。私は現在、PRODでOracleを使用し、TEST-EnvironmentでDerbyを使用しています。

すぐに、データベース固有のSQLコマンドの問題が発生しました。

  • OraclevsのALTER TABLE T1 MODIFY F1 VARCHAR(256);
  • ダービーのALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);

「ベンダーニュートラルALTERテーブル変更列データ型」SQLを作成する方法がわかりません。

Flywayを使用してこの問題に対処するための最良の方法は何ですか?

28
Peti

Flyway.locationsプロパティを使用できます。

テストでは、次のようになります。

flyway.locations=sql/common,sql/derby

および製品内:

flyway.locations=sql/common,sql/Oracle

次に、共通ステートメント(V1__Create_table.sql)を共通のコピーにし、DB固有のステートメント(V2__Alter_table.sql)の異なるコピーをデータベース固有の場所に置くことができます。

私の意見では、さらに良い解決策は、製品とテストで同じDBを使用することです。はい、パフォーマンスは少し低下しますが、一方で、環境間の別の違い(および潜在的なエラーの原因)も排除します。

36
Axel Fontaine

Oracleとこれらのデスクトップデータベースの一部との間のSQLの違いはわずかです。開発者がカスタムコードを挿入して、環境に基づいて実行時にSQLの軽量で動的なストリッピングを実行することは可能ですか(テーブルスペースの指定を削除するなど)?

私は、各開発者が2セットのSQLの同期を手動で維持することに依存するよりも、このアプローチを好みます。

0
dropofahat