Перейти с Postgres: LastInsertedId для непоследовательных идентификаторов

Я пишу небольшой веб-сервис на Go, который использует Postgres через пакет драйверов pq.

Я использую 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,

Так как мне вернуть uuid из моего нового ряда todo?

1 ответ

Решение

С https://godoc.org/github.com/lib/pq, похоже, вы должны использовать QueryRow вместо Exec

pq не поддерживает метод LastInsertId() типа Result в базе данных /sql. Чтобы вернуть идентификатор INSERT (или UPDATE или DELETE), используйте предложение Postgres RETURNING со стандартным вызовом Query или QueryRow:

var userid int
err := db.QueryRow(`INSERT INTO users(name, favorite_fruit, age)
    VALUES('beatrice', 'starfruit', 93) RETURNING id`).Scan(&userid)
Другие вопросы по тегам