Saltar al contenido principal

Migración de BD

Al actualizar la base de datos, existe un riesgo de pérdida de datos, como cuando se elimina un campo antiguo. Afortunadamente, Casdoor utiliza xorm, que ayuda con muchos problemas de migración de bases de datos. Sin embargo, algunas migraciones de esquema y datos aún deben manejarse manualmente, como cuando se cambia el nombre de un campo.

nota

Consulta la documentación de xorm para entender mejor las operaciones de esquema de xorm.

Cómo funciona

Como se mencionó anteriormente, xorm no puede manejar cambios en el nombre de los campos. Para abordar esto, xorm proporciona un paquete migrate que puede ayudar con este problema.

Para manejar el cambio de nombre de un campo, puedes escribir código como este:

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

Nuestro objetivo es renombrar p_type a ptype. Sin embargo, dado que xorm no soporta el cambio de nombre de campos, debemos recurrir a un enfoque más intrincado: asignar el valor de p_type a ptype, y posteriormente eliminar el campo p_type.

El campo ID identifica de manera única la migración que se está realizando. Después de que se ejecute m.Migrate(), el valor de ID se agregará a la tabla de migraciones de la base de datos.

Al iniciar el proyecto de nuevo, la base de datos verificará si existe algún campo ID en la tabla y se abstendrá de realizar cualquier operación asociada con el mismo ID.