Перейти к основному содержанию

Миграция БД

При обновлении базы данных существует риск потери данных, например, при удалении старого поля. К счастью, 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.