跳到主内容

数据库迁移

在升级数据库时,存在数据丢失的风险,例如在删除旧字段时。 幸运的是,Casdoor利用了xorm,它可以帮助解决许多数据库迁移问题。 然而,一些模式和数据迁移仍然需要手动处理,例如在字段名称更改时。

备注

参考xorm文档以更好地理解xorm的模式操作。

工作原理

如前所述,xorm无法处理字段名称的更改。 为了解决这个问题,xorm提供了一个migrate包,可以帮助解决这个问题。

要处理字段重命名,你可以编写如下代码:

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相关的任何操作。