GORM:upsert 没有插入正确的值

GORM: upsert not inserting proper values

我正在尝试找到一种方法来 UPSERT 一些值,但我遇到了一些意外行为。例如:

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 *

,好像不太对。

我还尝试构建名称和表达式的映射:

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 在更新引用此关联的模型时没有更新关联 table 的数据(例如:更新 user table 与关联的 bill 模型,其中 bill 数据已更改,预计将随 user 的保存一起保存)。

原来 GORM 只更新建立关联/外键的字段,而不是实际数据。您需要打开 FullSaveAssociations 会话选项才能更新所有字段。 (参见 https://gorm.io/docs/session.html#FullSaveAssociations and https://github.com/go-gorm/gorm/issues/3506