DB-Migration
Beim Upgrade der Datenbank besteht das Risiko eines Datenverlusts, beispielsweise beim Löschen eines alten Feldes. Glücklicherweise verwendet Casdoor xorm, das bei vielen Problemen der Datenbankmigration hilft. Dennoch müssen einige Schema- und Datenmigrationen manuell gehandhabt werden, wie zum Beispiel bei einer Feldnamenänderung.
Siehe die xorm-Dokumentation für ein besseres Verständnis der Schemaoperationen von xorm.
Wie es funktioniert
Wie bereits erwähnt, kann xorm Feldnamenänderungen nicht handhaben. Um dies zu adressieren, bietet xorm ein migrate-Paket an, das bei diesem Problem helfen kann.
Um eine Feldumbenennung zu handhaben, können Sie Code wie diesen schreiben:
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()
Unser Ziel ist es, den p_type
in ptype
umzubenennen. Da xorm jedoch die Umbenennung von Feldern nicht unterstützt, müssen wir zu einem komplizierteren Ansatz greifen: den Wert von p_type
ptype
zuweisen und anschließend das Feld p_type
löschen.
Das Feld ID
identifiziert eindeutig die durchgeführte Migration. Nachdem m.Migrate()
ausgeführt wurde, wird der Wert von ID
zur Migrationstabelle der Datenbank hinzugefügt.
Beim erneuten Starten des Projekts wird die Datenbank auf ein vorhandenes Feld ID
in der Tabelle überprüfen und keine Operationen ausführen, die mit demselben ID
verbunden sind.