메인 콘텐츠로 건너뛰기

DB 마이그레이션

데이터베이스를 업그레이드할 때, 예를 들어 오래된 필드를 삭제할 때 데이터 손실의 위험이 있습니다. 다행히도, 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_typeptype으로 이름 변경하는 것입니다. 그러나, xorm이 필드 이름 변경을 지원하지 않기 때문에, p_type의 값을 ptype에 할당하고, 그 후에 p_type 필드를 삭제하는 더 복잡한 접근 방식을 사용해야 합니다.

ID 필드는 수행되는 마이그레이션을 고유하게 식별합니다. m.Migrate()가 실행된 후에는, ID의 값이 데이터베이스의 마이그레이션 테이블에 추가됩니다.

프로젝트를 다시 시작하면, 데이터베이스는 테이블에서 기존 ID 필드를 확인하고 동일한 ID와 관련된 모든 작업을 수행하지 않습니다.