我正在尝试在bash中获取psql结果
echo 'SELECT * FROM fictive_table LIMIT 1;' >> /tmp/x.sql
psql --single-transaction -d dbname -f /tmp/x.sql
echo $?
这会失败,但我在bash中得到的结果是0.逻辑/代码是否有问题?
来自手册
psql如果正常结束则返回0,如果是致命的则返回1 发生错误(内存不足,文件未找到)
更新: @Andrea Spadaccini是对的。这不是致命的。我怎么能抓住它?
答案 0 :(得分:3)
可能由查询触发的那种错误并不像手册中提到的那样是致命的,也就是说,你没有内存不足而且没有找到错误的文件。
在手册中进一步阅读,我读到了:
psql如果正常结束则返回0到shell,如果发生了自身的致命错误(内存不足,文件未找到),则返回1;如果与服务器的连接变坏且会话不是交互式的,则返回2 3如果脚本中发生错误并且设置了变量ON_ERROR_STOP。
要捕捉到您的错误,您可以尝试:
ON_ERROR_STOP
变量;或者,答案 1 :(得分:0)
使用 -o
选项将psql(命令行终端)的查询结果写入文件。
Per documentation:
-o filename --output=filename Put all query output into file filename. This is equivalent to the command \o.