6


3

デルタエラー時にPhingのdbdeployタスクを自動的にロールバックする

私はhttp://phing.info/docs/guide/stable/[Phing]のhttp://phing.info/docs/guide/stable/chapters/appendixes/AppendixC-OptionalTask​​s.html#DbDeployTask[dbdeploy taskを使用しています]へhttp://www.davedevelopment.co.uk/2008/04/14/how-to-simple-database-migrations-with-phing-and-dbdeploy/ [データベーススキーマの管理]。 デルタファイルのクエリにエラーがない限り、これは正常に機能しています。

ただし、エラーが発生した場合、dbdeployはエラーが発生したクエリまでデルタファイルを実行してから中止します。 これにより、変更ログテーブルのエントリを手動でロールバックする必要があるため、フラストレーションが生じます。 そうしないと、dbdeployはその後の試行で移行が成功したと想定するため、再試行しても何も起こりません。

そこで質問は、* dbdeployでトランザクションを使用する方法はありますか、またはエラーが発生したときに自動的にphingのロールバックを行う他の方法を提案できますか?

注:_私はPhingにそれほど精通していないため、これにカスタムタスクの作成が含まれる場合は、サンプルコードまたは詳細情報を含むURLを高く評価します。 ありがとう

6 Answer


3


(まだそこにいる場合…​)dbダンプタスクのphingについては、dbのdumpユーティリティを使用して、phingタスクを作成します。 私は主にpostgresを使用し、phing build.xmlにこれを持っています:



3


問題を解決する最も簡単な方法は、トランザクションでsqlスクリプトをデフォルトで実行するpdoexecタスクを使用することです。 エラーが発生すると、データベースエンジンは変更を自動的にロールバックします(変更ログテーブルの変更を含む-データベースは以前の状態になります)

例:



3


私は知っています、これは非常に古いスレッドですが、おそらく他の誰かのために完全に使用されるでしょう。 try→ catchステートメントを使用して、そのためのソリューションを実装できます。 私の例:

            Live  database was upgraded successfully


            Errors in upgrading database


1


一連の取り消しデルタを記述し、他のタスクが失敗したときに実行されるphingタスクを追加してみませんか?


1


あなたは本当にカピストラーノを見てみる必要があります。 TomTom:ここに何かがありません:もちろんスキーマ変更前のバックアップを作成する必要があります - しかし、その間に挿入された新しいデータをどうするか すべてが大丈夫だと思う? この問題に適したツールはあるとは言いませんが、問題は現実に存在します。


-1


これを行う「適切な」方法は、スキーマが変更される前にバックアップを行い、エラーが発生した場合にロールバックすることです。

使用しているデータベースを言うことはありませんが、トランザクションですべてのスキーマの変更がサポートされるかどうかは疑問です。 Mos太ももの終わりのSQLデータベース(oracle、db2、sqlサーバー)は、本当に良い理由ですべての場合にそれをしてはいけません。 Transacitonalスキーマの変更は、非常に困難であり、非常に集中的です。