SQLスクリプトを実行するときに、スクリプトで最初のエラーが発生したときに停止するように指定する方法はありますか?以前のエラーに関係なく、通常は続行します。
4 に答える
.psqlrc に以下を追加するソリューションは完璧にはほど遠いと思います
\set ON_ERROR_STOP on
はるかにシンプルで便利な方法が存在します - psql をパラメータとともに使用します:
psql -v ON_ERROR_STOP=1
-X
.psqlrc ファイルの使用をオフにするパラメーターも使用することをお勧めします。私にとって完璧に機能します
ps Peter Eisentraut からの素晴らしい投稿で見つかった解決策。ありがとう、ピーター! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
を使用していると思いますがpsql
、これをファイルに追加すると便利かもしれません~/.psqlrc
。
\set ON_ERROR_STOP on
これにより、最初のエラーで中止されます。持っていない場合、トランザクションがあってもスクリプトを実行し続けますが、スクリプトの最後まですべて失敗します。
ポールが言ったように、おそらくトランザクションを使用したいと思うでしょう。psql --single-transaction ...
スクリプトを変更したくない場合にも、これを行うことができます。
したがって、.psqlrc に ON_ERROR_STOP を指定した完全な例:
psql --single-transaction --file /your/script.sql
正確には希望どおりではありませんが、スクリプトをで開始しbegin transaction;
て終了するとend transaction;
、最初のエラーの後は実際にはすべてスキップされ、エラーが発生する前に行ったすべてがロールバックされます。