2

psql 脚本的新手。
我尝试将变量传递给 psql 脚本,但出现错误:

psql -v dateav="2012-01-28" mcdb -p 5555 -U admin -q -t -A -c 'select count (client_name) from v_activities where scheduled_start_date like :'dateav';'

ERROR:  syntax error at or near ":"
LINE 1: ...) from v_activities where scheduled_start_date like :dateav;

有任何想法吗?

4

1 回答 1

2

会这样工作:

echo "select count (client_name) from v_activities \
where scheduled_start_date like :'dateav'" | \
psql -v dateav="2012-01-28" mcdb -p 5555 -U admin -q -t -A

解释:

我在这里引用手册

-c 命令

(...) 命令必须是服务器完全可解析的命令字符串(即,它不包含特定于 psql 的功能

大胆强调我的。您可以通过在命令中使用管道而不是使用-c选项来克服此限制。

echo 'command' | psql

这种不同的调用稍微贵一些,但是这样 psql 变量会像你想要的那样被替换。

尾随反斜杠仅用于行继续。同一行中不能有任何字符。唯一的目的是更好的格式。


对于这个简单的情况,您可以在调用 psql之前替换变量:

psql mcdb -p 5555 -U admin -q -t -A \
     -c "select count (client_name) from v_activities \
         where scheduled_start_date like '2012-01-28'"

我在命令行上使用双引号来输入单引号。您还可以结合美元报价和单引号:

-c 'select ... like $x$2012-01-28$x$'

但是您在现实生活中的应用程序中可能还有其他限制。

于 2012-11-26T20:08:55.073 回答