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