Pular para o conteúdo principal

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.

nota

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.