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

Blo*_*mex 2 postgresql shell psql

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

但是当我跑步时:

p='some stuff'
psql -d "dbname" -v v1="$p" -c "SELECT * FROM table WHERE name=:'v1'"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR:  syntax error at or near ":"
Run Code Online (Sandbox Code Playgroud)

同时:

psql -d "dbname" -v v1="$p" -c "\echo :'v1'"
Run Code Online (Sandbox Code Playgroud)

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

Cà *_*đen 5

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

psql -d "dbname" -v v1="$p" <<< "SELECT * FROM table WHERE name=:'v1'"
Run Code Online (Sandbox Code Playgroud)

文件中:

-c命令

--命令命令

...

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

...

-v确实设置了 psql 的内部变量,这是psql 特定的功能。这就是你收到语法错误的原因。