与Postgres一起使用:LastInsertedId用于非顺序标识符

时间:2016-10-04 17:05:29

标签: postgresql go pq

我正在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?

1 个答案:

答案 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)