【问题标题】:syntax error at or near ":" when running parametrized query from shell从 shell 运行参数化查询时,“:”处或附近出现语法错误
【发布时间】:2020-02-25 12:01:45
【问题描述】:

我正在尝试从 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'

【问题讨论】:

    标签: postgresql shell psql


    【解决方案1】:

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

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

    来自document

    -c 命令

    --command 命令

    ...

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

    ...

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

    【讨论】:

    • 谢谢,设法使它与echo "SELECT * FROM table WHERE name=:'v1'" | psql -d "dbname" -v v1="$p"一起工作
    • @Blomex 是的,当然,管道| 与此处的字符串表示法&lt;&lt;&lt;(将字符串发送到标准输入)具有相同的效果来运行该sql,除了它(psql)将运行在一个子外壳中。 upvoteaccept 对其他读者来说会非常激励和有用。
    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2018-10-15
    相关资源
    最近更新 更多