Это моя сущность, а это версию, которую Room автоматически создал для инициализации моей базы данных.
Теперь я хочу добавить новое поле в мою сущность, которое также должно быть проиндексировано через FTS, и следовать документу для создания автоматической миграции.
Проблема в том, что поскольку таблицы FTS являются виртуальными таблицами, их нельзя изменить, поэтому любая автоматическая миграция не удалась.
Я попробовал написать миграцию вручную, удалив и воссоздав таблицу FTS следующим образом:
р>
Код: Выделить всё
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("DROP TABLE IF EXISTS recipes_fts;");
database.execSQL("CREATE VIRTUAL TABLE IF NOT EXISTS recipes_fts USING FTS4(title, description, source, ingredients, notes, tokenize=unicode61 `tokenchars=#`, content=`recipes`);");
database.execSQL("ALTER TABLE recipes ADD COLUMN notes TEXT;");
}
};
- Мне также пришлось бы удалить и воссоздать триггеры, созданные Room. для исходной версии и перестроить таблицу FTS, которая беспорядочна и лишает меня смысла использовать Room.
- При использовании миграции вручную я столкнулся с этой проблемой и не нашел способ решить эту проблему
- Использование инспектора базы данных показывает, что существует множество таблиц, связанных с FTS, созданных автоматически (см. теневые таблицы в документе FTS), и я не уверен, можно ли их удалить тоже
Подробнее здесь: https://stackoverflow.com/questions/792 ... ts4-entity
Мобильная версия