【发布时间】:2020-12-02 12:29:52
【问题描述】:
我正在尝试找到一种方法来 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"
Gorm 版本:v1.20.6
Golang 版本:1.12
Postgres 12
【问题讨论】:
-
Gorm 的较新版本与 1.13 以下的 Go 版本存在一些问题。 Go 现在是 1.15,尝试升级到那个。也许它对您的具体问题没有帮助,但最好使用 12 以上的 Go 版本。
标签: postgresql go go-gorm