web-dev-qa-db-ja.com

UNIXシェルスクリプトでpsqlコマンドのリターンステータスを確認する

Psqlコマンドを使用して、postgreSQLデータベースに接続してクエリを発行しています。シェルスクリプトで実行されたクエリの戻り状態を確認する方法を教えてください。

利用した echo $?コマンドはステータスをチェックしますが、常にゼロを返します。

助けてくれてありがとう。

20
Naveen Reddy CH

psqlリターンコード ドキュメントに記載

終了ステータス
psqlは、正常に終了した場合はシェルに0を返し、それ自体の致命的なエラーが発生した場合は1(メモリ不足、ファイルが見つからないなど)、2インタラクティブ、およびスクリプトでエラーが発生し、変数ON_ERROR_STOPが設定された場合は3。

おそらくON_ERROR_STOPを使用するだけです。

テストの失敗とシェルへの報告の失敗:

$ psql -d test -v "ON_ERROR_STOP=1" <<EOF
select error;
select 'OK';
EOF

ERROR:  column "error" does not exist
LINE 1: select error;

$ echo $?
3

失敗は無視され、シェルに報告されません:

$ psql -d test  <<EOF
select error;
select 'OK';
EOF
ERROR:  column "error" does not exist
LINE 1: select error;
               ^
 ?column? 
----------
 OK
(1 row)

$ echo $?
0
35
Daniel Vérité

here で述べたように、SQLファイル/スクリプトの先頭に次の行を追加することもできます。

\set ON_ERROR_STOP true
0
Marco Roy