psql传递变量

时间:2012-11-26 17:44:02

标签: postgresql variables quoting psql

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;

有什么想法吗?

1 个答案:

答案 0 :(得分: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

说明:

我引用the manual here

  

-c command

     

(...)命令必须是服务器可完全解析的命令字符串(即,它包含没有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'"

我在命令行中使用双引号来获取单引号。您还可以合并dollar-quoting和单引号:

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

但您可能在现实生活中有其他限制。