猿问

使用自动迁移删除未使用的列

我已经开始与梦幻般的图书馆GORM合作。自动迁移工作完美,但在文档中,我阅读了注释“它不会删除未使用的列以保护您的数据”。

我可以跳过此规则吗?换句话说,我是否可以在gorm配置中添加/更改某些内容,以便有机会使用自动迁移删除未使用的列?


慕桂英3389331
浏览 85回答 2
2回答

慕的地10843

你可以这样写一个函数:func DropUnusedColumns(dst interface{}) {    stmt := &gorm.Statement{DB: DB}    stmt.Parse(dst)    fields := stmt.Schema.Fields    columns, _ := DB.Debug().Migrator().ColumnTypes(dst)    for i := range columns {        found := false        for j := range fields {            if columns[i].Name() == fields[j].DBName {                found = true                break            }        }        if !found {            DB.Migrator().DropColumn(dst, columns[i].Name())        }    }}用法:DropUnusedColumns(&User{})

宝慕林4294392

不,我不认为有一个简单的选择来做到这一点。以下是自动迁移源:https://github.com/go-gorm/gorm/blob/59730417aabd5b510d66d9d923d265a6fc0195a0/migrator/migrator.go#L83-L153您需要枚举表上的所有列,检查它们是否存在,然后将其删除。您还需要枚举现有关系和索引,如果它们不存在,则根据需要将其删除。如果你最终写了它,我认为你可以编写自己的函数,该函数采用接口并运行自动迁移。可以在现有代码中获取迁移器接口,并将其传递给函数。也许有人在某个地方写了这样的函数!AutoMigrategorm.Migratordb.Migrator()
随时随地看视频慕课网APP

相关分类

Go
我要回答