Postgresql 更新模型及其与现有主键的关系

Postgresql 更新模型及其与现有主键的关系,postgresql,go,go-gorm,Postgresql,Go,Go Gorm,我有以下结构,其中语言元数据是一种关系: metadataDB:=&dbm.VideoMetadata{ ID:*imdbid, ImdbID:*ImdbID, TmdbID:TmdbID, IsSeries:input.Spice!=nil, ImdbRating:ImdbRating, 成人:扩展元数据。成人, LinguisticMetadata:linguisticListDB,//LinguisticMetadata[]*LinguisticMetadata`gorm:“非空”` 副标

我有以下结构,其中
语言元数据
是一种关系:

metadataDB:=&dbm.VideoMetadata{
ID:*imdbid,
ImdbID:*ImdbID,
TmdbID:TmdbID,
IsSeries:input.Spice!=nil,
ImdbRating:ImdbRating,
成人:扩展元数据。成人,
LinguisticMetadata:linguisticListDB,//LinguisticMetadata[]*LinguisticMetadata`gorm:“非空”`
副标题:subtitlesDB,//Subtitles[]*Subtitle
}
我想创建一个新的元数据,或者更新现有的元数据(如果它已经存在)。这不是一个问题,可以很容易实现,如下所示:

newMetadata:=dbm.VideoMetadata{}
db.Where(dbm.VideoMetadata{ID:*imdbid}).Assign(metadataDB.FirstOrCreate(&newMetadata)
但是,我也需要对其关系具有相同的行为。
语言元数据的主键是国家的前缀,例如:“en”、“fr”、“it”。。。因此,对于给定的元数据,它很可能已经存在。因此,如果关系的主键已经存在,则应该更新(或替换)模型

使用上面显示的代码,如果LanguagisticMetadata主键已经存在,则会出现以下错误:

pq:重复键值违反唯一约束“语言元数据”

这对我来说没有意义,因为如前所述:

GORM将在创建/更新记录时自动保存关联及其引用如果关联有主键,GORM将调用Update保存它,否则将创建它。