【问题标题】:PostgreSQL "?" argument placeholder does not work for "WITH" [duplicate]PostgreSQL“?”参数占位符不适用于“WITH”[重复]
【发布时间】:2016-09-13 08:00:59
【问题描述】:

我正在尝试通过以下方式使用?(我在 Golang 中使用它来生成查询,但它似乎不依赖于 Go):

WITH Tmp(name, enabled) AS (
    VALUES(?, ?),(?, ?)
) 
UPDATE table_groups 
    SET enabled = (SELECT enabled 
                   FROM Tmp 
                   WHERE table_groups.name=Tmp.name) 
WHERE table_groups.name IN (SELECT name FROM Tmp)

得到:

syntax error at or near ","

如果我用具体值替换上述语句中的?,一切正常。使用?WITH 是否有问题,我该如何解决?谢谢。

【问题讨论】:

  • 无关:不需要标量子查询。
  • 我认为 Postgres 仅适用于编号占位符,即 $1
  • 您使用什么驱动程序包来处理 pgsql?您知道,Go 的标准库中不包含任何 RDBMS 的驱动程序,因此有必要告诉我们您在做什么。如果您使用github.com/lib/pqthe docs,请仅提及$n 样式参数,正如@Ainar-G 所建议的那样。 IOW,查询占位符的格式是特定于驱动程序的,而不是通用的。
  • @kostix:谢谢,我确实在使用 pq

标签: sql postgresql go


【解决方案1】:

Go 不支持这个。

如果你想要这个功能,你可以使用jmoiron/sqlx

使用 sqlx 的示例(来自docs):

var levels = []int{4, 6, 7}
query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)

// sqlx.In returns queries with the `?` bindvar, we can rebind it for our backend
query = db.Rebind(query)
rows, err := db.Query(query, args...)

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 2015-03-28
    • 2012-01-27
    • 2011-11-23
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多