Simple&Natural

Room 마이그레이션 이슈 본문

안드로이드(Android)/이슈 및 해결

Room 마이그레이션 이슈

Essense 2023. 8. 15. 21:42
728x90

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 자체에 뭔가 내부적인 버그가 있는 것 같은데 당분간은 수동으로 써야 할 것 같다.

 

 

 

728x90