Удалить таблицу, изначально созданную с помощью "неизвестного токенизатора"?

У меня есть база данных 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 кэширует информацию о схеме, поэтому вам нужно закрыть и заново открыть базу данных.

Другие вопросы по тегам