为了账号安全,请及时绑定邮箱和手机立即绑定

用gorm写goose go迁移

用gorm写goose go迁移

Go
米琪卡哇伊 2021-12-06 16:42:39
默认的goose go 迁移准备了一个提供以下功能的函数*sql.Tx:提供一个事务,而不是直接提供数据库实例,因为 goose 还需要在同一个事务中记录模式版本。每次迁移都应作为单个事务运行以确保数据库完整性,因此无论如何这是一个很好的做法。我想使用gorm migrations编写我的迁移,但我不确定如何将给定的事务用于该目的。下面是一个例子:func Up_20151230135812(txn *sql.Tx) {  txn.CreateTable(&User{})}构建给了我txn.CreateTable undefined (type *sql.Tx has no field or method CreateTable)预期的结果。如何获取交易以与 gorm 一起使用?
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

goose 对 gorm 及其函数(CreateTable 等)一无所知


查看goose/lib/goose/migration_go.go结尾


鹅只是创建交易


db, err := goose.OpenDBFromDBConf(&conf)

if err != nil {

    log.Fatal("failed to open DB:", err)

}

defer db.Close()


txn, err := db.Begin()

if err != nil {

    log.Fatal("db.Begin:", err)

}


{{ .Func }}(txn)


err = goose.FinalizeMigration(&conf, txn, {{ .Direction }}, {{ .Version }})

if err != nil {

    log.Fatal("Commit() failed:", err)

}

并使用“database/sql”包中的sql.Tx


但您可以使用 gorm 实现自定义包装器 ;-)


查看完整回答
反对 回复 2021-12-06
  • 1 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信