您的位置 首页 知识分享

Gorm (Postgres) 自增主键自定义类型如何解决?

解决 gorm (postgres) 自增主键自定义类型的问题 在使用 gorm 与 postgres 时,如…

Gorm (Postgres) 自增主键自定义类型如何解决?

解决 gorm (postgres) 自增主键自定义类型的问题

在使用 gorm 与 postgres 时,如果将主键设置为自定义类型(例如 bigint),表自动迁移时无法创建自增。这是因为 gorm 无法识别自定义类型的自增属性。

通过调试 gorm 和 postgres 驱动器的代码,找到了解决办法:

在 bigint 类型中添加 gormdbdatatype 方法,用于指定表字段的数据类型:

func (bigint) gormdbdatatype(db *gorm.db, field *schema.field) string {   switch db.dialector.name() {   case "mysql", "sqlite":     return "bigint"   case "postgres":     if field.autoincrement {       return "bigserial"     }     return "bigint"   }   return "bigint" }
登录后复制

gormdbdatatype 方法根据数据库类型返回适当的数据类型。对于 postgres,如果字段是自增的,则返回 “berial”,否则返回 “bigint”。

修复后的代码:

type GVA_MODEL struct {   ID BigInt `gorm:"primaryKey;autoIncrement;type:bigint;size:64;->" form:"id" json:"id" query:"id"` // 主键ID   // ... }  type BigInt json.Number  // ... (Scan、Value 方法与原代码相同)  func (BigInt) GormDBDataType(db *gorm.DB, field *schema.Field) string {   switch db.Dialector.Name() {   case "mysql", "sqlite":     return "bigint"   case "postgres":     if field.AutoIncrement {       return "bigserial"     }     return "bigint"   }   return "bigint" }
登录后复制

通过这个修复,在自动迁移时,postgres 将正确地创建自定义类型 bigint 的主键并将其设置为自增。

以上就是Gorm (Postgres) 自增主键自定义类型如何解决?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/4846.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部