我试图找到一种方法来 UPSERT 一些值,但我得到了一些意想不到的行为。例如:
db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "name"}},
DoUpdates: clause.AssignmentColumns([]string{"name", "email"}),
})
退货
ON CONFLICT (name) DO UPDATE SET name = {excluded name %!s(bool=false)}, email = {excluded email %!s(bool=false)} RETURNING *
,这似乎不对。
我还尝试构建名称和表达式的地图:
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),
})
产生
DO UPDATE SET "email"='excluded.email',"name"='excluded.name'
但我希望
DO UPDATE SET "email"="excluded.email","name"="excluded.name"
戈姆版本:v1.20.6
Golang 版本:1.12
Postgres 12
慕后森
相关分类