如何在bash中获取psql结果?

时间:2011-03-31 14:08:10

标签: bash postgresql psql

我正在尝试在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是对的。这不是致命的。我怎么能抓住它?

2 个答案:

答案 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.