将PostgreSQL psql错误消息传递给unix shell变量

时间:2014-07-18 09:03:10

标签: postgresql output ksh psql

我从Unix shell脚本调用PostgreSQL函数。

有谁能告诉我如何捕获从unix shell变量中的函数返回的PostgreSQL错误消息?

我使用了以下方法,但无法

#!/bin/ksh

function crt_views
{
#Call the POSTGRE pkg which created dynamic views

echo "Calling POSTGRE function FN_CRT_ACTNET_VWS..." >> $LOGFILENAME
pg_msg=`psql --echo-all -U<uname> << EOF
set client_min_messages='NOTICE';
SELECT FUNC_CRT_VWS();
EOF`

}


crt_views
echo "PRINTING - $pg_msg"

在输出中我没有看到PostgreSQL函数返回的错误。请帮忙

1 个答案:

答案 0 :(得分:0)

您需要将 stderr 重定向到 stdout ,因为反向添加某些内容只会让您 stdout 。< / p>

这是因为 psql 将<{1}}和RAISE NOTICE(以及其他内容)的输出打印到 stderr

注意:我也从使用反引号转换为 dollar-paren 样式执行。使用反引号,以这种方式重定向 stderr 不起作用。 (我的测试是在 sh 而不是 ksh ,但在这种情况下,行为应该类似,我怀疑。)

此外,RAISE EXCEPTION将因错误而失败,这可能是合乎需要的(取决于您的需要)。

所以,这导致了这样的事情:

set -e