Simple&Natural
Room 마이그레이션 이슈 본문
9/1 내용 업데이트
저장된 Scheme json 파일이 버전별로 모두 동일한 것이 이슈인 것으로 보인다.
때문에 Migration 시 스키마 변경사항을 인지하지 못해 쿼리를 생성하지 않는 이슈인 것 같다.
근데 분명 테이블을 추가했는데 스키마 파일이 동일한 것도 의문이다.
계속 분석해봐야겠다.
기존의 Room은 version=2 인 상황에서 새 테이블을 추가하여 version=3으로 마이그레이션 해야 하는 상황이었다.
1 to 2 의 경우에는 수동으로 마이그레이션을 해주었지만 이번에 간단한 테이블 추가라 AutoMigration을 이용한 상황.
실행을 해보면 아래와 같은 로그만 반복된다.
expected:
TableInfo{name='recentSearchQueries', columns={query=Column{name='query', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null'}, queriedDate=Column{name='queriedDate', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='recentSearchQueries', columns={}, foreignKeys=[], indices=[]}
생성된 AutoMigration impl 클래스를 확인해보니 아래처럼 migrate 로직이 전혀 생성이 되지 않았다.
@Generated("androidx.room.RoomProcessor")
@SuppressWarnings({"unchecked", "deprecation"})
class AppDatabase_AutoMigration_2_3_Impl extends Migration {
public AppDatabase_AutoMigration_2_3_Impl() {
super(2, 3);
}
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
}
}
하지만, 여러 번 테스트를 해본 결과 정상적으로 migrate 함수가 쿼리와 함께 생성이 된 경우에도 역시 같은 현상이 발생했다.
Google 이슈트래커와 비슷한 케이스를 몇개 더 검색을 해보니 나와 같은 케이스가 있었다
https://issuetracker.google.com/issues/236001085
https://stackoverflow.com/questions/71002284/room-how-to-automigrate-db-for-new-table
결론은 구글측도 재현이 안돼서 해결을 못하는 중이라고 한다.
일단 이 문제의 경우 수동으로 migration 로직을 넣어주면 이상없이 동작하긴 한다.
AutoMigration 자체에 뭔가 내부적인 버그가 있는 것 같은데 당분간은 수동으로 써야 할 것 같다.
'안드로이드(Android) > 이슈 및 해결' 카테고리의 다른 글
구글 인앱결제 테스트 팁 (1) | 2024.12.06 |
---|---|
ViewPager2 사용 시 ViewModel이 onCleared 된 후 다시 초기화되지 않는 이슈 관련 회고 (0) | 2022.12.22 |
Support 의존성을 사용하는 외부 라이브러리의 호환성 조정 방법 (0) | 2022.06.03 |
Okhttp Interceptor에서 Exception을 catch하지 못하는 이슈 (0) | 2022.05.22 |
Kotlin-kapt & ButterKnife 동시 사용 시 null 오류 (0) | 2021.04.29 |