如何在Bash中获取psql查询结果?

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

更新:

@Andrea Spadaccini是正确的。这不是致命的。我该如何捕捉它?

3个回答

3
也许此查询引发的错误不像手册中提到的那些致命错误,例如没有内存可用或找不到文件。
在手册中进一步阅读后,我发现:
如果psql正常完成,则向shell返回0;如果发生自身的致命错误(内存不足,找不到文件),则返回1;如果与服务器的连接失效并且会话不是交互式的,则返回2;如果脚本中出现错误并设置了ON_ERROR_STOP变量,则返回3。
要捕获您的错误,可以尝试:
设置ON_ERROR_STOP变量;或者
更改方法,将查询输出保存到文件中,然后使用该文件进行操作。

0

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

-o 文件名
--output=文件名
将所有查询输出放入文件filename中。这相当于命令\o。

0

[我知道...这篇文章已经有点了...]

我发现这对于我的用例可以在bash中运行psql命令:

$ echo "command-to-run" |(sudo -u postgres psql -t -d <dbname> -f -)

我在我的nextcloud服务器上使用psql - 这是一个示例命令:
$ echo "select uid from oc_users where uid like '%thd%';" |(sudo -u postgres psql -t -d nextcloud -f -)
 bmurphy@thdxxx.xxx
 jostiguy@thdxxx.xxx
 mroth@thdxxx.xxx
 rpatel@thdxxx.xxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接