与gorm一起编写一个goose go迁移
默认go迁移准备一个函数,该函数提供一个与gorm一起编写一个goose go迁移,go,database-migration,go-gorm,Go,Database Migration,Go Gorm,默认go迁移准备一个函数,该函数提供一个*sql.Tx: 提供了一个事务,而不是直接提供DB实例,因为goose还需要在同一事务中记录模式版本。每次迁移都应该作为一个事务运行,以确保数据库的完整性,因此这是一个很好的实践 我想使用编写我的迁移,但我不确定如何使用给定的事务来达到这个目的。下面是一个例子: func Up_20151230135812(txn *sql.Tx) { txn.CreateTable(&User{}) } 该构建为我提供了未定义的txn.CreateTab
*sql.Tx
:
提供了一个事务,而不是直接提供DB实例,因为goose还需要在同一事务中记录模式版本。每次迁移都应该作为一个事务运行,以确保数据库的完整性,因此这是一个很好的实践
我想使用编写我的迁移,但我不确定如何使用给定的事务来达到这个目的。下面是一个例子:
func Up_20151230135812(txn *sql.Tx) {
txn.CreateTable(&User{})
}
该构建为我提供了未定义的
txn.CreateTable(type*sql.Tx没有字段或方法CreateTable)
。如何获取用于gorm的事务?goose对gorm及其功能(CreateTable等)一无所知
看看这本书的结尾
只需创建事务
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)
}
并从“数据库/sql”包中使用
但是您可以使用gorm;-)实现自定义包装器 我希望会有一个类似的现有包装器,但是对于
sql.Tx
。