Удалить таблицу, изначально созданную с помощью "неизвестного токенизатора"?
У меня есть база данных sqlite3. Сообщение об ошибке гласит, что одну таблицу внутри этой БД нельзя удалить unknown tokenizer: mm
,
Я попробовал это непосредственно с командой DROP TABLE tablename;
внутри новейшего SQLiteSpy v1.9.11, а также в коде.NET и в официальном пакете sqlite NuGet v 1.0.103.
Как я могу удалить таблицу, где токенизатор неизвестен?
1 ответ
В документации сказано:
Для каждой виртуальной таблицы FTS в базе данных создается три-пять реальных (не виртуальных) таблиц для хранения базовых данных. Эти реальные таблицы называются "теневыми таблицами". Реальные таблицы имеют имена "%_content", "%_segdir", "%_segments", "%_stat" и "%_docsize", где "%" заменяется именем виртуальной таблицы FTS.
Итак, чтобы избавиться от этой таблицы, удалите теневые таблицы:
DROP TABLE tablename_content;
DROP TABLE tablename_segdir;
DROP TABLE tablename_segments;
DROP TABLE tablename_stat;
DROP TABLE tablename_docsize;
А затем используйте (очень опасный) PRAGMA writable_schema, чтобы удалить оставшуюся информацию об этой таблице из системной таблицы:
PRAGMA writable_schema = ON;
DELETE FROM sqlite_master WHERE type = 'table' AND name = 'tablename';
SQLite кэширует информацию о схеме, поэтому вам нужно закрыть и заново открыть базу данных.