2016-11-16 6 views
2

フライウェイを自分のプロジェクトに統合しました。私は多くの移行を行っており、主にシード・データが追加されているため、新しい空のデータベースを移行するのに時間がかかります。今私はそれを変更したい。残念ながら、それらの移行は既にプロダクションにプッシュされていました(そして、ある時点でシードデータもそこに移行されました)。新しいベースラインを設定した後にフライウェイの移行ファイルを変更する

私の考えは、現行バージョンの運用システムのベースラインを設定し、後で古い移行をクリーンアップすることでした。スキーマ移行をスカッシュし、シードおよびテストデータを新しい場所に移動します生産に

は今私の質問は以下のとおりです。

  1. 私は他のすべてに影響を与えずに、私の本番データベースにベースラインを設定するにはどうすればよいですか?データベースのflyway baseline ...に直接お電話ください。または、あらゆる種類の特別な移行ファイルを使用できますか?ベースラインを直接データベースのschema_versionテーブルに書き込むことはできますか?そのようなクエリはどのように見えますか?
  2. 私の最新の移行はV4_6_3__...です。だから私のベースラインはV5__...にする必要がありますか?または、V4__...で十分であり、同じメジャーバージョンのすべての移行が含まれていますか?
  3. ベースラインが設定されている場合、次の移行タスクで本番データベースを破損することなく、ベースラインよりも古い移行を追加、編集、削除できますか?事前に

    おかげで...

基本的な質問のため申し訳ありませんが、フライウェイのドキュメントがまったく助けていないこと、それは、私には思えます!

答えて

1

遅れて答えてください。私は非常に似たようなものを@markdsievers提案しました:

少なくとも、生産環境がバージョンXflyway.setTarget(X))以上であることを確認しました。その後、新しいスキーマバージョンテーブル(flyway.setTable('temporary_schema_version'))に変更し、古いテーブルを削除した単一の移行を実行しました。その後、スキーマバージョンテーブルを元のバージョンに戻し、ベースラインをバージョンY > Xに設定し、一時テーブルを削除した別の移行を実行しました。

今、私の運用環境の展開をクラッシュせずにYより低いバージョンのすべての移行を編集/削除/削除できます。

1

私は非常に似たようなシナリオを辿り、あなたが望むもののほとんどを行う「Rebaser」という自社のツールを書きました。私たちの主な動機は、Flyway 3.xから4.3にアップグレードすることでしたが、私たちはまた大きな歴史がありました。その要点は次のとおりです。

  1. 多くの場合、すべてのマイグレーションは意味があります。私は通常V2__base_ddl.sqlV3__base_data.sqlを持っています(Flywayはスキーマの作成などのためにバージョン番号の最初のカップルを使用できます)。これはマニュアルの部分です。
  2. リベースツールが古いschema_versionテーブルを検出して削除します。
  3. リベースツールでは、新しいベースラインバージョンセットでinit + migrateが実行されます。
  4. Rebaseツールは、完了したことを示すフットプリント(カスタムテーブルのリベースキー)を残します。私の統合テストのために

(つまりバニラデータベースをスピンアップし、最新に前方に移動する)を構築する私は、このように私は統合テストのためのテストデータを持って確保することはなく、Flyways locations引数を使用してテストデータSQLスクリプトの余分なフォルダを追加しますテスト環境以外の環境でも使用できます。

私たちのRebaserはJava APIのFlywayの周りの薄いラッパーで、設定されている場合はリベースを行い、それからFlywayに委任します。

フライウェイにはリベースという概念はありませんが、履歴が大きくなり、古くなったデータ/ DDLが含まれているため、必要なことがわかっています。これまでのところ、このシステムは完璧に機能しています。

関連する問題