Go语言 为什么切片不传递给pg数组?

f45qwnt8  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(75)

我试图将一个切片传递给一个有CTE的查询,但我得到一个错误
Goland代码:

insertQuery = `
   WITH cte AS (SELECT $1                AS id,
                    UNNEST(ARRAY($2)) AS address)
   INSERT
   INTO user_addresses
   SELECT id, address
   FROM cte;
`
addresses = []string{"firstAddress", "secondAddress", "thirdAddress"}
_, err = db.ExecContext(ctx, insertQuery, id, addresses)
if err != nil {
    log.Println(err)
}

字符串
我得到一个错误:

ERROR: at or near \")\": syntax error (SQLSTATE 42601)


我尝试将切片直接传输到pg.Array,但结果是一样的。错误的原因是什么?

8dtrkrch

8dtrkrch1#

我认为这里的问题是你的查询,你是如何使用UNNEST(ARRAY($2))的,这里的$2指的是整个地址片,在你的情况下,它取的是整个地址数组,而不是单个元素。

vsmadaxz

vsmadaxz2#

正如@Tejanidhi所指出的,你正在使用UNNEST(ARRAY($2)),这里$2指的是切片的地址。为了解决这个问题,github.com/lib/pq已经提供了StringArray()Int32Array()BoolArray()和更多的方法。下面是示例用法:

addresses = []string{"firstAddress", "secondAddress", "thirdAddress"}
_, err = db.ExecContext(ctx, insertQuery, id, pq.StringArray(addresses))
if err != nil {
    log.Println(err)
}

字符串

相关问题