Перейти с 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)