回答:
.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
--single-transaction
使用されている場合でも、-v ON_ERROR_STOP=1
ゼロ以外の存在ステータスに は依然として必要です
それはあなたが望むものではありませんが、スクリプトをで開始してbegin transaction;
で終了するとend transaction;
、最初のエラーの後にすべてを実際にスキップし、エラーの前に行ったすべてをロールバックします。
私はいつもマニュアルを直接参照するのが好きです。
終了ステータス
psqlは、正常に終了した場合はシェルに0を返し、1自体の致命的なエラー(メモリ不足、ファイルが見つからないなど)が発生した場合は2、サーバーへの接続が不良でセッションが対話的でない場合は2、スクリプトでエラーが発生し、変数ON_ERROR_STOPが設定されました。
デフォルトでは、PostgreSQLサーバーエラーで実行しているSQLコードの場合、psqlはエラーを終了しません。エラーをキャッチして続行します。上記のようにON_ERROR_STOP
設定をオンに設定した場合、psqlがSQLコードでエラーをキャッチすると、終了3
してシェルに戻ります。
-v ON_ERROR_STOP=ON
少なくとも9.2でも動作します。ブールの「true」のバリアントは許可されていると思います。