会这样工作:
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$'
但是您在现实生活中的应用程序中可能还有其他限制。