我正在Go中编写一个小型Web服务,它通过pq driver package使用Postgres。
我使用uuid作为我的模型的标识符,所以LastInsertId不起作用。
所以我想我可以这样:
var id string
res, err := session.Exec("INSERT INTO todos (text, list_id) VALUES ($1, $2) RETURNING todo_id", text, listId).Scan(&id)
Scan
似乎与Exec
配合得很好。
那么如何从我的新todo行返回uuid?
答案 0 :(得分:3)
从https://godoc.org/github.com/lib/pq#hdr-Queries看起来你应该使用QueryRow而不是Exec
pq不支持database / sql中Result类型的LastInsertId()方法。要返回INSERT(或UPDATE或DELETE)的标识符,请使用带有标准Query或QueryRow调用的Postgres RETURNING子句:
var userid int
err := db.QueryRow(`INSERT INTO users(name, favorite_fruit, age)
VALUES('beatrice', 'starfruit', 93) RETURNING id`).Scan(&userid)