SQLスクリプトを実行するときに、スクリプトの最初のエラーが発生したときに停止するよう指定する方法はありますか?通常、以前のエラーには関係なく続行されます。Postgres sqlがスクリプトエラーで失敗する
おかげ
SQLスクリプトを実行するときに、スクリプトの最初のエラーが発生したときに停止するよう指定する方法はありますか?通常、以前のエラーには関係なく続行されます。Postgres sqlがスクリプトエラーで失敗する
おかげ
それはあなたが望むものを正確ではありませんが、あなたはbegin transaction;
でスクリプトを起動して、end transaction;
で終わるならば、それは実際には最初のエラーの後、すべてをスキップし、それはそれはエラーの前にいたすべてのものをロールバックされます。
あなたはpsql
を使用していると仮定しますが、これは~/.psqlrc
ファイルに追加すると便利です。
\set ON_ERROR_STOP on
これにより、最初のエラーで中止されます。もしあなたがそれを持っていなければ、トランザクションでさえ、あなたのスクリプトを実行し続けますが、あなたのスクリプトが終了するまではすべて失敗します。
そしておそらく、ポールが言ったようにトランザクションを使いたいと思うでしょう。また、スクリプトを変更したくない場合は、psql --single-transaction ...
で行うこともできます。
だから完全な例では、あなたの.psqlrcでON_ERROR_STOPで:
psql --single-transaction --file /your/script.sql
トランザクションが失敗した場合でも、psqlコマンドの終了ステータスは0です。 –
実際、 '--single-transaction'が使用されても、ゼロ以外の存在ステータスの場合には' -v ON_ERROR_STOP = 1 'はまだ必要です – bitek
私は
\set ON_ERROR_STOP on
はるかにシンプルかつ存在完璧にはほど遠いソリューションは.psqlrcに以下を追加することだと思います便利な方法 - パラメータ付きのpsqlを使用する:
psql -v ON_ERROR_STOP=1
-X
パラメータは.psqlrcファイルの使用をオフにします。 私にとって完璧に動作します
p.s.このソリューションはPeter Eisentrautの素晴らしい投稿にあります。ありがとう、ピーター! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
本当ですが、それでもすべてが解析されます。そして、最初のトランザクションが成功した場合にのみ* 2番目のトランザクションを実行したい場合、これは機能しません。 – Wildcard