I am trying to find a way to UPSERT some values but I got some unexpected behavior. For example:
db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "name"}},
DoUpdates: clause.AssignmentColumns([]string{"name", "email"}),
})
Returns
ON CONFLICT (name) DO UPDATE SET name = {excluded name %!s(bool=false)}, email = {excluded email %!s(bool=false)} RETURNING *
, which doesn't seems right.
I also tried building a map of names and expressions:
values := map[email:excluded.email name:excluded.name col3:table.col3+excluded.col3]
db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "name"}},
DoUpdates: clause.Assignments(values),
})
Which generates
DO UPDATE SET "email"='excluded.email',"name"='excluded.name'
but I expect
DO UPDATE SET "email"="excluded.email","name"="excluded.name"
Gorm version: v1.20.6
Golang version: 1.12
Postgres 12