11

私たちのシステム

移行を .sql ファイルとしてバージョン管理下に置こうとしています。開発者は VN__*.sql ファイルを作成し、バージョン管理にコミットし、5 分ごとに実行されるジョブは自動的に Dev and Test データベースに移行されます。変更によって問題が発生しないことが判明したら、他の誰かが手動ジョブを実行して、本番環境で移行を実行します。

私の問題:

いくつかのテーブルを作成するデモ移行がありました。V4__DemoTables.sql を PC のバージョン管理にチェックインしました。

私たちの Linux ボックスでは、5 分ごとに実行されるジョブがバージョン管理から新しいファイルを抽出し、次に flyway.sh ファイルを実行しました。ファイルを検出して実行しました。

しかし、.sql ファイルにはタイプミスがありました。また、フライウェイが BEGIN TRAN ... END TRAN で移行を自動的にラップすることに問題がある Neteeza を使用しています。そのため、移行によって 2 つのテーブルが作成され、3 つ目のテーブルの前に中止されました。

問題ないと思いました。.sql ファイルが作成した 2 つのテーブルを削除しました。バージョン管理から V4__ をチェックアウトし、タイプミスを修正して再送信しました。

5 分後にアップデートが抽出されましたが、flyway はチェックサムが一致しないと訴えています。したがって、更新された V4__DemoTables.sql ファイルは実行されません。

更新されたファイルを受け入れ、入力ミスの場合に SCHEMA_VERSION ファイルのチェックサムを更新するにはどうすればよいですか?

ドキュメントを読むと、開発者が修正を含む新しい V4_1_DemoTables.sql ファイルを作成する必要があると提案しているようです。しかし、これは V4__ ファイル内のコマンドと衝突するため、これは間違っているように見えました。

したがって、ドキュメントが私がしなければならないことを暗示しているのは次のとおりです。

  • SCHEMA_VERSION テーブルに従って、V4__ を「成功した」移行として残します。

    V4_1_ を作成して、V4__ のタイプミス行の前に作成されたテーブルを削除します。

    すべての実際の作業を行うために、元のファイルのタイプミスを修正した V4_2_ を作成します。

これは正しいです?

4

1 に答える 1

14

移行が正常に完了したが、一部の db オブジェクトがまだ正しくない場合 (列名のタイプミスなど)、あなたが言ったように実行し、それを修正するフォローアップ スクリプトをプッシュします (列の名前を変更するなど)。 .

移行が失敗し、DDL トランザクションを使用する DB で実行されなかった場合、DB を手動でクリーンアップする必要があります。これの意味は:

  • DB への移行の影響を元に戻す
  • SCHEMA_VERSION テーブルからバージョンを削除し、前のバージョンを最新としてマークする

この 2 番目のステップは、 flyway.repair () コマンドの導入により、将来的に自動化される予定です。

于 2012-07-24T19:05:38.447 に答える