Перейти до основного вмісту

Міграція БД

При оновленні бази даних існує ризик втрати даних, наприклад, при видаленні старого поля. На щастя, Casdoor використовує xorm, який допомагає з багатьма проблемами міграції баз даних. Однак, деякі схеми та міграції даних все ще потрібно обробляти вручну, наприклад, коли змінюється назва поля.

примітка

Дивіться документацію xorm для кращого розуміння операцій зі схемами xorm.

Як це працює

Як було зазначено раніше, xorm не може обробляти зміни назв полів. Для вирішення цієї проблеми xorm надає пакет migrate, який може допомогти з цією проблемою.

Для обробки перейменування поля ви можете написати код наступним чином:

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

Наша мета - перейменувати p_type на ptype. Однак, оскільки xorm не підтримує перейменування полів, ми повинні вдатися до більш складного підходу: присвоїти значення p_type до ptype, а потім видалити поле p_type.

Поле ID унікально ідентифікує виконувану міграцію. Після виконання m.Migrate(), значення ID буде додано до таблиці міграцій бази даних.

При повторному запуску проекту база даних перевірить наявність поля ID у таблиці та утримається від виконання будь-яких операцій, пов'язаних з тим самим ID.