用gorm写一个鹅去迁移

时间:2016-01-02 18:03:47

标签: go database-migration go-gorm

默认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 个答案:

答案 0 :(得分:1)

goose对gorm及其功能一无所知(CreateTable等)

查看goose / lib / goose / migration_go.go

的结尾

goose只是创建交易

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实现自定义包装器; - )