Я пытаюсь update
несколько строк в одном запросе Postgres в Golang. Ниже будет мой фактический запрос (образец из одного из Бенджамина ответа здесь ),
update users as u set
email = u2.email,
first_name = u2.first_name,
last_name = u2.last_name
from (values
(1, 'hollis@weimann.biz', 'Hollis', 'O\'Connell'),
(2, 'robert@duncan.info', 'Robert', 'Duncan')
) as u2(id, email, first_name, last_name)
where u2.id = u.id;
Могу ли я передать массив структуры вместо values
? Я изложил то, что имею в виду, ниже. В настоящее время у меня нет инструментов, чтобы проверить это, поэтому я обращаюсь к сообществу.
type detail struct {
id int
email string
firstname string
secondname string
}
var details []detail
detail1 := detail{1, "hollis@weimann.biz", "Hollis", "Connell"}
detail2 := detail{2, "robert@duncan.info", "Robert", "Duncan"}
details = append(details, detail1, detail2)
query := "update users as u set
email = u2.email,
first_name = u2.first_name,
last_name = u2.last_name
from (values
?
) as u2(id, email, first_name, last_name)
where u2.id = u.id;"
prepQuery, args, _ := sqlx.In(query, details)
var tx *sqlx.Tx
query = tx.Rebind(query)
_, err = tx.Exec(query, args...)