这是一个棘手的问题。
Verticavsql
有一个变量,ON_ERROR_STOP
如果设置该变量,将停止脚本并返回错误代码 3。
\set ON_ERROR_STOP on
也就是说,使用 -o 选项似乎不会触发此行为,因为错误不在 SQL 端。
我建议然后作弊,并重定向输出,而不是要求 Vertica 这样做:
/apps/vertica/vertica_v5.1.6/bin/vsql -h server.my.com -U "user" -w "pass" -A -F, -c "select count(*), month from table1 group by month" > /data/test.csv
请注意 -F 和 -A 选项来创建类似 csv 的输出。您可能还希望 -q (安静)只有查询输出,没有消息。
然后,如果目标文件不存在,您确实有一个 bash 非空退出状态:
[me@server ~]$/apps/vertica/vertica_v5.1.6/bin/vsql -h server.my.com -U "user" -w "pass" -A -F, -c "select count(*), month from table1 group by month" > /data/test.csv
-bash: /data/test.csv: No such file or directory
[me@server ~]$ echo $?
1
从那时起,检查返回码就很容易了,同时捕获 bash 和 Vertica
# your vsql command....
STATUS=$?
if [[ $STATUS -gt 0 ]]
then
echo oops
exit
fi
如果您有很多这样的参数,您甚至可能会创建一个以查询和输出文件为参数的函数。