2016-10-21 21 views
4

私はFlywayをデータベース移行ツールとして検討してきました。フライウェイ:1回のトランザクションで複数の移行を実行する

私は明確な答えを見つけることができなかった一つのことは以下の通りです:

は、私が代わりにそれぞれ移行を有するので、フライウェイは、単一のトランザクションですべてのAS-の-まだ未適用の移行を実行するように強制することができますそれ自身の取引ですか?

dev環境では問題はありませんが、あるアップデートから次のアップデートへ複数のマイグレーションを実行する可能性のある実稼働環境では、移行に失敗した場合、データベースは「マイグレーションされた」状態、いくつかの移行はコミットされ、いくつかの移行は非難されました。

この問題を回避するには、単に一つのファイルに必要なすべてのSQLを詰め込むことであろうが、それに問題がある:

  • は、生産移行とのdevの移行は、あなたがすることができないので、異なる方法で実行されてしまうでしょう開発環境での移行には何が先になるかを事前に知っておく必要があります。私はあなたがいつもきれいにしてから新しいマイグレーションをすることができると思いますが、これはマイグレーションの増加に関してフライウェイ設計の精神に反しているようです。

  • チェックサムは、新しい変更が追加されるとすぐに異なります。

フライウェイはまだこのような機能をサポートしていませんか? Liquibaseなどの移行ツールはありますか?

+0

Liquibaseは、トランザクション内で各changeSetを実行しようとします。おそらく、updateSqlコマンドを使用してsqlファイルを生成し、それを後処理して、必要なトランザクションの動作を設定したり、ツールを使ってそれを適用したりすることができます。このパイプラインは、顕著な問題を避けるためにdev/prodに実装することができます。 – dbf

答えて

2

このような機能はありません。しかし、Flywayは移行当りのトランザクション境界を提供していると考えられています。うまくいけば、Axel Fontaineは、これが機能ではないという結果に終わった技術的/設計上の考慮事項に着目してください。

FAQには、ダウングレード/失敗に関するthisthisがあります。よくテストされ、 バックアップを持っている.... DBと のすべてのバージョンは現在生産中で展開されたコード間の下位互換性を維持し、戦略を復元

:ポリシーがに沸きます。

私のケースでは、私たちはほぼ3年間Flywayを使用しており、引用されたポリシーを遵守しています。どのような配置でも、多くのデータベースに対して100以上のマイグレーションを実行することができます。これはすべて、リリースプロセスの失敗の機会を最小限に抑えることになります。

私はそれ以前のはるかに小さなプロジェクトでLiquibaseを使用していましたが、ロールバック手順を提供することを除いて、このような機能は思い出せません。

関連する問題