我需要在从 bash 脚本运行 psql 时检查错误。这是我们如何在脚本中运行的示例:
return_value=$(psql \
-X \
$POSTGRES_CONNECTION_STRING \
-f ./build_table.sql \
-w \
-b \
-A \
-q \
-t \
)
psql_exit_status=$?
上面的语句工作正常unlesssql 脚本中有错误,在这种情况下,我在控制台上得到一些错误输出,但是return_value
设置为零,原样psql_exit_status
.
The build_table
sql 脚本创建一个表并从 csv 文件导入数据——如果 csv 文件中有错误,或者如果我故意拼写错误create tableeeee
在 sql 脚本中,我在屏幕上看到 psql 错误,但据我所知,没有返回错误信息。
我尝试过使用-o
psql 中的标志以输出到文件。什么也没有显示,这是一个空白文件。我也尝试过添加2>&1
在 psql 语句之后查看我是否可以通过这种方式获得一些错误信息,但什么也没做。
我需要的是某种方法来告诉 sql 脚本已异常退出和/或崩溃,而不必查看屏幕上的输出。我执行 psql 的方式可能吗?我的 psql 标志之一可能有问题吗?
来自psql文档 https://www.postgresql.org/docs/current/app-psql.html:
如果 psql 正常完成,则向 shell 返回 0;如果发生自身的致命错误(例如,内存不足、未找到文件),则返回 1;如果与服务器的连接出现故障并且会话无法交互,则返回 2;如果发生错误,则返回 3。脚本和变量发生错误ON_ERROR_STOP
已设置。
所以你需要添加-v ON_ERROR_STOP=on
给你的psql
选项。
然而,设置此变量会产生以下副作用:
默认情况下,命令处理在发生错误后继续。当此变量设置为打开时,处理将立即停止。在交互模式下,psql会返回到命令提示符;否则,psql 将退出,返回错误代码 3,以区分这种情况与使用错误代码 1 报告的致命错误情况。在任何一种情况下,任何当前正在运行的脚本(顶级脚本,如果有,以及任何其他脚本)它可能已被调用)将立即终止。如果顶级命令字符串包含多个 SQL 命令,则处理将以当前命令停止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)