っPhingのdbdeployタスクを自動的にロールバックにデルタエラー
質問
を使用してい Phing's dbdeployタスク へ 管理データベースのスキーマ.このクラスタを管理しておりますが誤りがないかをチェックのクエリーのデルタファイルです。
しかし、誤りがある場合は,dbdeployまでのデルタファイルのクエリのエラーとしてabort.これかにフラストレーション、そして手動でロールバックのエントリchangelog表した。私がdbdeployの移行が成功したのみの者で、再までは何も行いません。
その質問は、 はありませんdbdeploy用取引、宜しくお願い致しますはどうしたらいphingンデックスを自動的にエラーが発生した場合?
注意: いることが苦Phingなので、これは、書面にカスタムタスクは、コード例は、またはurlに関する情報をお願い申し上げます。感謝
解決
(だが...)に関するphingのためのdbのダンプタスクを使用dbのダンプ光をphing。使っていpostgres主としてこの私のphing build.xml:
<target name="db-dump" depends="">
<php expression="date('Ymd-Hi')" returnProperty="phing.dump.ts"/>
<exec command="pg_dump -h ${db.host} -U ${db.user} -O ${db.name} | gzip > ${db.dumppath}/${db.name}-${phing.dump.ts}.gz" />
</target>
他のヒント
最も簡単な方法の問題点の解決で使用pdoexecタスクによるデフォルトの走るsqlスクリプト取引はない。時にエラーが発生するデータベースエンジンを自動的にロールバック変更さを変更ログテーブル-データベースに以前の状態)
例:
<pdosqlexec
url="pgsql:host=${db.host}
dbname=${db.name}"
userid="${db.user}"
password="${db.pass}"
src="${build.dbdeploy.deployfile}"
/>
ほんと、これは非常に古いスレッドがいますので使います。きみ->追算を実施する溶液です。私の例:
<trycatch>
<try>
<exec
command="${progs.mysql} -h${db.live.host} -u${db.live.user} -p${db.live.password} ${db.live.name} < ${db.live.output}/${build.dbdeploy.deployfile}"
dir="${project.basedir}"
checkreturn="true" />
<echo>Live database was upgraded successfully</echo>
</try>
<catch>
<echo>Errors in upgrading database</echo>
<exec
command="${progs.mysql} -h${db.live.host} -u${db.live.user} -p${db.live.password} ${db.live.name} < ${db.live.output}/${build.dbdeploy.undofile}"
dir="${project.basedir}"
checkreturn="true" />
</catch>
</trycatch>
理由は書いていないシリーズを元に戻す中州を追加phingタスクが失敗したときには、その他す。
まるべきカピストラーノ.時点で課金:だ何かが足りない。の前にバックアップのスキーマコース変更をすることがんの新しいデータが挿入された一方また考えるものです。いうtthatが良いツールこの問題が、問題が存在する。
の"適切な"いこの前にバックアップのスキーマの変更、そしてrollbackの場合はエラーになります。
でしょうdbを使用することはとても不思議だとは思わないだろんの場合すべてのスキーマの変更はバージョンでサポートされます。Mos腿末SQLデータベース(oracle、db2、sqlサーバーあいるすべての場合でも充分な理由があります。Transacitonalスキーマの変更がっ本当に上下帯域可変。