Migration de base de données
Lors de la mise à niveau de la base de données, il existe un risque de perte de données, comme lors de la suppression d'un ancien champ. Heureusement, Casdoor utilise xorm, qui aide à résoudre de nombreux problèmes de migration de base de données. Cependant, certaines migrations de schéma et de données doivent encore être gérées manuellement, comme lorsqu'un nom de champ est changé.
Consultez la documentation xorm pour mieux comprendre les opérations de schéma de xorm.
Comment ça marche
Comme mentionné précédemment, xorm ne peut pas gérer les changements de nom de champ. Pour résoudre ce problème, xorm fournit un package migrate qui peut aider avec ce problème.
Pour gérer le renommage de champ, vous pouvez écrire du code comme ceci :
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()
Notre objectif est de renommer p_type
en ptype
. Cependant, puisque xorm ne prend pas en charge le renommage de champ, nous devons recourir à une approche plus complexe : assigner la valeur de p_type
à ptype
, puis supprimer le champ p_type
.
Le champ ID
identifie de manière unique la migration en cours. Après l'exécution de m.Migrate()
, la valeur de ID
sera ajoutée à la table des migrations de la base de données.
Lors du redémarrage du projet, la base de données vérifiera l'existence d'un champ ID
dans la table et s'abstiendra de réaliser toute opération associée au même ID
.