我正在尝试从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'
)
答案 0 :(得分:1)
您不能使用-v
命令中的-c
中定义的变量(请参见下文)。尝试将命令传递到标准输入中:
psql -d "dbname" -v v1="$p" <<< "SELECT * FROM table WHERE name=:'v1'"
来自document:
-c命令
-命令命令
...
命令必须是可以由以下命令完全解析的命令字符串 服务器(即 它不包含特定于psql的功能 ),或一个 反斜杠命令。
...
-v
确实设置了psql的内部变量,即 psql特定的功能 。这就是为什么出现语法错误。