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;
有什么想法吗?
答案 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$'
但您可能在现实生活中有其他限制。