从外壳运行参数化查询时,在“:”处或附近出现语法错误

时间:2019-10-30 08:20:33

标签: postgresql shell psql

我正在尝试从shell运行参数化查询。

但是当我跑步时:

p='some stuff'
psql -d "dbname" -v v1="$p" -c "SELECT * FROM table WHERE name=:'v1'"

我遇到以下错误:

ERROR:  syntax error at or near ":"

同时:

psql -d "dbname" -v v1="$p" -c "\echo :'v1'"

正常工作。 (返回预期:'some stuff'

1 个答案:

答案 0 :(得分:1)

您不能使用-v命令中的-c中定义的变量(请参见下文)。尝试将命令传递到标准输入中:

psql -d "dbname" -v v1="$p" <<< "SELECT * FROM table WHERE name=:'v1'"

来自document

  

-c命令

     

-命令命令

     

...

     

命令必须是可以由以下命令完全解析的命令字符串   服务器(即 它不包含特定于psql的功能 ),或一个   反斜杠命令。

     

...

-v确实设置了psql的内部变量,即 psql特定的功能 。这就是为什么出现语法错误。