我试图将一个切片传递给一个有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,但结果是一样的。错误的原因是什么?
2条答案
按热度按时间8dtrkrch1#
我认为这里的问题是你的查询,你是如何使用UNNEST(ARRAY($2))的,这里的$2指的是整个地址片,在你的情况下,它取的是整个地址数组,而不是单个元素。
vsmadaxz2#
正如@Tejanidhi所指出的,你正在使用
UNNEST(ARRAY($2))
,这里$2指的是切片的地址。为了解决这个问题,github.com/lib/pq
已经提供了StringArray()
,Int32Array()
,BoolArray()
和更多的方法。下面是示例用法:字符串