問題タブ [flyway]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flyway - Flyway で失敗した移行を再試行する
私はフライウェイを構成して完全に理解する過程にあり、この状況に陥りました:
- flyway で動作するように新しいプロジェクトを正常に構成しました。
- テスト データベースをバージョン 0 から 1.0.3 に正常に移行しました。
- バージョン 1.0.4 への移行の実行に失敗しました。(すでに存在する列を追加しようとしていましたが、これまでのところ問題はありませんでした。悪いです。)
ただし、対応するスクリプトに必要な変更を加えて動作させると、flyway は次のメッセージを表示し続けました。
完全なダンプを復元してすべての移行を再度適用したくなかったので、alter table スクリプトを機能させるためだけに、「schema_version」テーブルにいくつかの変更を加えました。
- 1st バージョン 1.0.4 のエントリを消去しました
- 2番目に、バージョン1.0.3の「current_version」フィールドを1に設定しました
- そして、再度 flyway:migrate コマンドを実行しました
この後、移行が最終的に適用され、成功メッセージが表示されましたが、これがこのような状況に対処するための正しいアプローチであるかどうかはよくわかりません. 「schema_version」テーブルを自分で変更する権利があるかどうかはわかりません。フライウェイ自体によってのみ変更する必要があると思うからです。
それで、私に何が起こったのかを説明した後、私の質問は次のようになります。
自分で「schema_version」テーブルを変更せずに、フライウェイで失敗した移行を適用するために「再試行」する方法はありますか?
このタスクを実行するために私が知らないコマンドはありますか?
flyway - タイムスタンプではなくバージョン カウンターを使用する理由
Flyway がタイムスタンプではなくバージョン番号を使用するのはなぜですか? 大規模で分散している可能性のあるチームでは、どのように機能するのでしょうか?
すべてのチーム メンバーに、バージョン番号 xy を予約していることを知らせる電子メールを送信する必要がありますか? 2 人の開発者が同じバージョン番号を使用するとどうなりますか? 別のより高い番号が既にチェックインされた後に、より低いバージョン番号がバージョン管理にチェックインされた (そして統合データベース上のビルド サーバーによって実行された) 場合はどうなりますか?
バージョン番号の代わりにタイムスタンプが使用されるレール (>=2.1) での移行を厳密にモデル化した mybatis-migration に慣れています。現時点では、タイムスタンプの方がはるかに理にかなっていると思います。バージョン番号について心配する必要がなく、順不同の移行が簡単に検出されます。
java - liquibase の Java コード変更セット
liquibase で Java コード変更セットを作成する方法はありますか (つまり、JDBC 接続を受け取り、データベースでいくつかの変更を実行する Java クラスを提供します)?
(フライウェイにそのような機能があることは知っています)
java - FlywayとJPAの統合
私の現在のSpring3.0プロジェクトは、Flywayと統合しています。
信頼できるドキュメントがあるので、グーグルサイトに感謝します。しかし残念ながら、との統合についてはあまり話されていませんJPA
。
したがって、質問は次のとおりです。
Flywayをと統合する方法は
persistence.xml
?そしてそれはどのように機能しますか?JPAプロバイダーがスキーマを更新するたびauto generate
に、その前後にスクリプトをどのように実行しますか?これまでのフライウェイによるクエリはHQLをサポートしていないと思います。そのため、移行イベントを統合する方法を知るためのサンプルコードはありますか?インターセプターまたは新しい側面を設計しますか?ドメインレベルで何をしますか?
ヒントをいただければ幸いです。前もって感謝します。
flyway - フライウェイ:mavenなしのdb init?
移行にmavenを使用するIMHOは、開発マシンでのみ問題ありません。通常、サーバーでは maven を使用できません (そこにインストールすることは不可能な場合があります)。
So: Maven なしでデータベースを初期化するにはどうすればよいですか? flyway.init() を呼び出すだけですか? データベースがすでに初期化されている場合はどうなりますか?
SQL ステートメントを実行してデータベースを初期化できますか? 私の外部キーとインデックスは、異なるデータベース インスタンス間で異なる/混乱しているため、既に完全なスキーマ スクリプトを作成し、データのエクスポート、スキーマの削除、スキーマの再作成、およびデータの復元でテストしました。すべてのデータベースでこれを実行して、それらがまったく同じであることを確認します。
database-migration - フライウェイの移行ファイルを開発者のマシンに適用するが、本番ボックスには適用しない方法はありますか?
多くの新しいテーブルを使用するアプリケーションの新機能を開発しているとき、テーブル定義は開発の数日後まで安定していません。同じコードベースのバグ修正をデプロイするときに、これらの不安定な移行ファイルを本番ボックスに適用せずにソース管理にチェックインしたいと思います。
フライウェイの移行ファイルを開発者のマシンに適用するが、本番ボックスには適用しない方法はありますか?
私は機能ブランチが好きではないので、機能ブランチを避けたいのですが、それらは私が維持するにはあまりにも多くの労力を要します。
flyway - 説明に数字を使用して、SQLファイルの読み込み順序を強制できますか?
Flywayをいじってみて、1つの質問があります。初期バージョン(完全に新しい空のデータベースの場合)について、SQLファイルを次のようにモジュール化できますか。
などなど、SQLファイルの正確な読み込み順序を強制しますか?
ドキュメントにはこれができないことを示唆するものはありませんが、ドキュメントにはこれができることを示唆するものはありません:-)
ありがとう!
database - Flyway jdbc ドライバーをインスタンス化できません
Flyway と Spring 3.0 を使い始めたばかりです。ここまでは、Flyway の依存関係とプラグインを pom.xml に追加しただけです。次に、mvn flyway:status
コマンドラインで実行してみました。ただし、jdbc ドライバーをインスタンス化できないと不平を言っています (私は postgres を使用しています)。
誰がこれを引き起こしているのか知っていますか? Springsource Tool Suite を使用してアプリを開発しています。postgres ドライバーは、WEB-INF/lib/postgresql-9.1-902.jdbc4.jar の下にあります。
どんな助けでも大歓迎です!ありがとう!
flyway - フライウェイはどのようにpostgresスキーマをロックしますか?
私はPostgresでFlywayを使用していますが、Tomcatサーバーを実行している場合、DROP SCHEMA foo
それを実行しようとすると、Tomcatがシャットダウンするまで機能しません。flywayには、実行後にスキーマへの変更をブロックするメカニズムがあると思います。スキーマを変更する他のクライアントのブロックは、フライウェイでどのように実行されますか。
mysql - フライウェイでの接続タイムアウト
私はフライウェイ1.5を使用していますmysql Ver 14.14 Distrib 5.1.52, for unknown-linux-gnu (x86_64) using readline 5.1
次の移行を書きました。
Wheretable1
は小さく、table2
283,018 行あります。
移行は成功しました ( と の両方に列が追加されましたtable1
)table2
が、バージョンの更新は失敗しました ( I got com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
)。
私のmy.cnf
ファイルには次の行が含まwait_timeout=30
れており、これらの 2 つの列を追加するtable2
のに時間がかかりwait_timout
、移行が「失敗」したと思っていましたが、現在、移行は成功しましたが、バージョンは更新されていません。しかし、私はこのSQLクエリを実行しました:
そして、これを得ました:
wait_timeout
これは、約8時間であることを示唆しています...
だから私の質問はなぜこの接続タイムアウトが発生するのですか?
そして主に-どうすれば修正できますか?
編集: アプリとデータベースの両方が同じマシン上にあります。
完全なスタック トレースは次のとおりです。