数据库迁移
当数据库升级时,数据很可能崩溃,我们需要删除旧字段。 幸运的是,Casdoor 使用的 xorm 能帮助我们处理许多有关数据库迁移的问题。 但我们仍需自行处理一些模式和数据迁移,例如 字段名称发生更改时。
备注
有关Schema 操作的信息,您可以参阅xorm docs
工作原理
如上所述,当字段名称发生更改时,xorm将无法进行任何操作, 但是它提供了一个 迁移 包来帮助我们解决这个问题。
你可以通过以下代码来处理字段重命名相关问题:
migrations := []*migrate.Migration{
{
ID: "CasbinRule--fill ptype field with p",
Migrate: func(tx *xorm.Engine) error {
_, err := tx.Cols("ptype").Update(&xormadapter.CasbinRule{
Ptype: "p",
})
return err
},
Rollback: func(tx *xorm.Engine) error {
return tx.DropTables(&xormadapter.CasbinRule{})
},
},
}
m.Migrate()
我们想要实现的目标是: 将 p_type
重命名为 ptype
但既然xorm 不支持字段重命名我们只能使用更复杂的方式:将 p_type
的值分配给 ptype
然后删除 p_type
字段。
ID
字段特指我们进行的迁移。 m.Migrate()
运行后, ID
的值将被添加到数据库的迁移表。
当项目再次启动时 数据库将检查表中现有的 ID
字段,不会执行相同 ID
的操作。