Passer au contenu principal

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é.

note

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.