我正在使用psql命令连接和查询PostgreSQL数据库。请问有人知道如何在shell脚本中检查执行查询后的返回状态吗?
我已经使用了echo $?
命令来检查状态,但它总是返回零。
谢谢帮助。
我正在使用psql命令连接和查询PostgreSQL数据库。请问有人知道如何在shell脚本中检查执行查询后的返回状态吗?
我已经使用了echo $?
命令来检查状态,但它总是返回零。
谢谢帮助。
psql
的返回代码已有文档记录:
退出状态
如果psql
正常结束,则向shell返回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
操作失败被忽略且未报告给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
pg_catalog.pg_authid
@raphael:pg_catalog.pg_authid
- Daniel Véritépsql -v "ON_ERROR_STOP=1" -c "\COPY pg_catalog.pg_authid TO STDOUT;" | cat
产生了ERROR: permission denied for relation pg_authid
的错误,但是退出代码为0。以后会使用这个方法 https://dev59.com/1nM_5IYBdhLWcg3wzmgw - raphaelset -o pipefail
以在错误时使管道失败。 - Victor Roetman