Migração de BD
Ao atualizar o banco de dados, há um risco de perda de dados, como ao deletar um campo antigo. Por sorte, o Casdoor utiliza xorm, que auxilia com muitos problemas de migração de banco de dados. No entanto, algumas migrações de esquema e dados ainda devem ser tratadas manualmente, como quando um nome de campo é alterado.
Consulte a documentação do xorm para entender melhor as operações de esquema do xorm.
Como Funciona
Como mencionado anteriormente, o xorm é incapaz de lidar com mudanças de nome de campo. Para resolver isso, o xorm oferece um pacote migrate que pode auxiliar com esse problema.
Para lidar com a renomeação de campo, você pode escrever código como este:
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()
Nosso objetivo é renomear p_type
para ptype
. No entanto, como o xorm não suporta renomeação de campos, devemos recorrer a uma abordagem mais complexa: atribuir o valor de p_type
para ptype
e, subsequentemente, deletar o campo p_type
.
O campo ID
identifica unicamente a migração que está sendo realizada. Após m.Migrate()
ser executado, o valor de ID
será adicionado à tabela de migrações do banco de dados.
Ao iniciar o projeto novamente, o banco de dados verificará a existência de qualquer campo ID
na tabela e se absterá de realizar quaisquer operações associadas ao mesmo ID
.