gpt4 book ai didi

go - 用 gorm 写一个 goose go migration

转载 作者:IT王子 更新时间:2023-10-29 02:15:11 25 4
gpt4 key购买 nike

默认goose go migration 准备了一个提供*sql.Tx的函数:

A transaction is provided, rather than the DB instance directly, since goose also needs to record the schema version within the same transaction. Each migration should run as a single transaction to ensure DB integrity, so it's good practice anyway.

我想使用 gorm migrations 编写我的迁移,但我不确定如何将给定的交易用于该目的。这是一个例子:

func Up_20151230135812(txn *sql.Tx) {
txn.CreateTable(&User{})
}

构建为我提供了 txn.CreateTable 未定义(类型 *sql.Tx 没有字段或方法 CreateTable)。我如何获取交易以用于 gorm?

最佳答案

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)
}

并使用sql.Tx来自“数据库/sql”包

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

关于go - 用 gorm 写一个 goose go migration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34568997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com