Zum Hauptinhalt springen

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.

Notiz

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.