Postgresql 在使用go gorm创建记录时,是否有方法删除RETURNING子句?

Postgresql 在使用go gorm创建记录时,是否有方法删除RETURNING子句?,postgresql,go,go-gorm,Postgresql,Go,Go Gorm,我将go gorm与postgres 11 DB一起使用,并面临一个问题,即在创建记录时需要完全删除RETURNING子句,该语句似乎默认包含在内。我只想插入记录,但除了错误,什么也得不到。 我在数据库中有一些复杂的关系,不支持返回语句,所以当我尝试这样插入时:为了简洁起见,使代码更简单 type Cargo struct { Id int64 `gorm:"primaryKey"` Name string } dsnString := fmt.Sprin

我将go gorm与postgres 11 DB一起使用,并面临一个问题,即在创建记录时需要完全删除RETURNING子句,该语句似乎默认包含在内。我只想插入记录,但除了错误,什么也得不到。 我在数据库中有一些复杂的关系,不支持返回语句,所以当我尝试这样插入时:为了简洁起见,使代码更简单

type Cargo struct {
    Id   int64 `gorm:"primaryKey"`
    Name string
}
dsnString := fmt.Sprintf("host=%s ...") 
db, _ := gorm.Open(postgres.New(postgres.Config{DSN: dsnString}), &gorm.Config{})

cargo := Cargo{Name: "test"}
db.Create(cargo)
我收到错误:无法对关系货物执行插入返回

我尝试使用参数创建db连接,但未返回:true:

db, _ := gorm.Open(postgres.New(postgres.Config{DSN: dsnString, , WithoutReturning: true}), &gorm.Config{})
但是当我尝试db.Createcargo时,我得到了一个不同的错误:此驱动程序不支持LastInsertId。它似乎仍在尝试获取最后一个插入的id


在go pg中,我可以使用db.Modelx.Returningnull.Insertcargo,但我找不到使用go gorm的方法。非常感谢您的帮助。

我能让gorm不在postgres中使用RETURNING子句的唯一两种方法是

不声明主键的模型 这意味着去掉名为ID/ID的字段或任何标记的gorm:primaryKey

类型货物结构{ 名称字符串 } db.Create&Cargo{Name:Test} 与桌子一起使用 在这种情况下,您可以将模型表示为map[string]接口{},而不是结构,并像这样使用它:

db.Tablecargos.Createmap[string]接口{}{ 名称:Test, }
目前,gorm并不很好地支持这个用例。如果您不能,并且这些选项不适合您,我建议在中添加一个功能请求。

有什么问题吗不需要“返回”。把它拿走。你到底有什么问题?如果您有产生错误的代码,请在问题中包含该代码。我们无法调试看不到的代码。Gorm使用RETURNING子句填充实体的主键。您始终可以使用Exec调用运行您自己的非实体查询。如果第一次尝试时问题不清楚,请原谅。我插入了一个更简单的代码版本。真正的代码在视图上插入了一些复杂的结构,这些结构背后有一些规则,这使得他们对返回的语句不满意。我的代码与go pg一起工作,并试图迁移到go gorm。调用Exec完全忽略了使用gogorm的意义。我只是想知道这是否不受支持,或者我是否遗漏了一些东西,因为go pg很容易使用。Returningnull。我很感激go gorm在插入后试图给我id,但我不需要它。我只需要在插入那些复杂实体时禁用此行为。和Exec一起写那些长插页会很痛苦。谢谢!删除标签gorm:primaryKey很有效。我必须检查一下这样做的后果,但至少我已经过了插入东西的早期阶段。