检查unix shell脚本中psql命令的返回状态

时间:2016-05-06 12:17:37

标签: postgresql shell

我使用psql命令连接并在postgreSQL数据库上发出查询。任何人都可以让我知道如何在shell脚本中检查已执行查询的返回状态。

我使用echo $?命令检查状态,但它总是返回零。

感谢您的帮助。

2 个答案:

答案 0 :(得分:32)

psql返回代码is documented as

  

退出状态
         如果正常结束,psql将返回0,如果发生致命错误,则返回1          它自己发生(例如内存不足,文件未找到),2如果          与服务器的连接变坏,会话不是交互式的,          如果脚本和变量ON_ERROR_STOP发生错误,则返回3          已经确定了。

您可能只想使用ON_ERROR_STOP。

未通过测试并向shell报告:

$ 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

失败被忽略而未报告给shell:

$ 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

答案 1 :(得分:0)

如上所述here,您还可以在SQL文件/脚本的顶部添加此行:

\set ON_ERROR_STOP true