在Gorm模型中使用自定义序列的配置问题
Gorm绑定PostgreSQL序列的正确方法
你的写法不生效是因为Gorm对主键生成逻辑的处理规则,sql:"nextval('user_tfa_info_seq')"这个标签不会被Gorm的主键生成逻辑识别,得换用以下方式:
- 调整结构体标签:用
gorm的default标签指定序列的nextval,同时注意ID字段类型要和序列类型匹配(PostgreSQL的bigint对应Go的int64,而非uint):
type UserTfaInfo struct { ID int64 `gorm:"primaryKey;type:bigint(20) not null;default:nextval('user_tfa_info_seq')"` // 其他字段按需添加 }
- 手动关联序列(若表已存在):如果表已经创建,需要执行SQL语句将序列绑定到ID字段的默认值:
ALTER TABLE user_tfa_info ALTER COLUMN id SET DEFAULT nextval('user_tfa_info_seq');
- 注意AutoMigrate的影响:如果使用Gorm的
AutoMigrate,它可能会自动覆盖主键的默认生成策略,建议在AutoMigrate执行完成后,手动执行上面的SQL语句确保序列生效。
内容的提问来源于stack exchange,提问作者Montaser Majid
相关产品推荐
相关产品推荐

