Могу ли я передать массив Struct в качестве значения для заполнителя в Golang при выполнении Postgres UPDATE? - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь 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...)
...