首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vsql错误处理(无此类文件或目录)

vsql错误处理(无此类文件或目录)
EN

Stack Overflow用户
提问于 2013-09-11 10:30:35
回答 3查看 2.9K关注 0票数 3

我正在使用shell脚本将查询结果上传到我的数据库。在脚本中,我首先将查询结果保存到一个csv文件中,然后将该文件上传到另一个数据库。在每个步骤之后,我会向用户发送一封通知电子邮件。我面临的问题是我不能进行适当的错误处理。例如,我使用类似下面的命令来生成csv文件:

代码语言:javascript
复制
/apps/vertica/vertica_v5.1.6/bin/vsql -h server.my.com -U "user" -w "pass" -o "/data/test.csv" -c "select count(*), month from table1 group by month" 

如果目录data不存在,Unix中的退出状态仍然返回0(即使发生错误,操作也成功),因为查询结果显示在屏幕上。我如何处理这样的错误?我应该在脚本中使用哪种IF语句来捕获它?

非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2013-09-13 14:05:59

这是一个棘手的问题。

Vertica vsql有一个变量ON_ERROR_STOP,如果设置了该变量,将停止脚本并返回错误代码3。

代码语言:javascript
复制
\set ON_ERROR_STOP on

也就是说,使用-o选项似乎不会触发此行为,因为错误不在SQL端。

我的建议是作弊,重定向输出,而不是让Vertica去做:

代码语言:javascript
复制
/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 (quiet)只有查询输出,没有消息。

然后,如果目标文件不存在,您将具有bash non null退出状态:

代码语言:javascript
复制
[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

代码语言:javascript
复制
# your vsql command....
STATUS=$?
if [[ $STATUS -gt 0 ]]
then
    echo oops
    exit
fi

您甚至可能会创建一个以查询和输出文件作为参数的函数(如果您有很多这样的文件)。

票数 3
EN

Stack Overflow用户

发布于 2013-09-11 11:00:54

使用mkdir -p /data确保在查询之前该目录已经存在。

票数 0
EN

Stack Overflow用户

发布于 2017-10-14 04:20:20

此外,如果您收到此错误:ERROR 5286: Unsupported SET option ON_ERROR_STOP

您可以使用vsql选项:vsql -v ON_ERROR_STOP=on

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18731731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档