我使用psql命令连接并在postgreSQL数据库上发出查询。任何人都可以让我知道如何在shell脚本中检查已执行查询的返回状态。
我使用echo $?
命令检查状态,但它总是返回零。
感谢您的帮助。
答案 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