Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql psql传递变量_Postgresql_Variables_Quoting_Psql - Fatal编程技术网

Postgresql psql传递变量

Postgresql psql传递变量,postgresql,variables,quoting,psql,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_activi

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;
有什么想法吗?

的工作原理如下:

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$'
但在实际应用程序中可能还有其他限制