3

我正在尝试在 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 正常完成,则向 shell 返回 0,如果发生自身的致命错误(内存不足,未找到文件)则返回 1

更新:@Andrea Spadaccini 是对的。这不是致命的。我怎样才能抓住它?

4

2 回答 2

3

也许由查询触发的那种错误不像手册中提到的那样是致命的,即,你没有用完内存,也没有找到文件未找到错误。

在手册中进一步阅读,我读到:

如果 psql 正常完成,则返回 0 到 shell,如果发生自己的致命错误(内存不足,找不到文件),则返回 1,如果与服务器的连接出错并且会话不是交互式的,则返回 2,如果出现错误,则返回 3脚本中发生错误并且设置了变量 ON_ERROR_STOP。

要捕获您的错误,您可以尝试:

  • 设置ON_ERROR_STOP变量;或者,
  • 更改方法,将查询输出保存到文件,然后使用该文件。
于 2011-03-31T14:12:40.707 回答
0

使用该选项-o将查询结果从 psql(命令行终端)写入文件。
根据文档

-o 文件名
--输出=文件名

将所有查询输出放入文件 filename。这相当于命令 \o。
于 2012-07-31T05:37:53.577 回答