2016-11-29 2 views
1

У меня есть база данных sqlite3. Единую таблицу внутри этой БД нельзя отбросить, в сообщении об ошибке указано unknown tokenizer: mm.Удалить таблицу, созданную с помощью «неизвестного токенизатора»?

Я попробовал его непосредственно с командой DROP TABLE tablename; внутри нового SQLiteSpy v1.9.11, а также внутри кода .NET и официального SQLite NuGet пакета против 1.0.103.

Как я могу отказаться от таблицы, где токенизатор неизвестен?

ответ

2

The documentation говорит:

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

Смежные вопросы