2010-01-23 2 views

ответ

1

Я не в курсе, что вы можете оставить все индексы в одной команде - IMO вы должны отказаться от каждого по имени. Смотрите также: http://www.sqlite.org/lang_dropindex.html Кроме того, проверить это для получения дополнительной информации: Drop all tables command

+0

мне нужно сбросить индексы только таблица, не все из базы данных. – Pentium10

14

Чтобы получить имена всех индексов в базе данных

SELECT name FROM sqlite_master WHERE type == 'index' 

Для конкретной таблицы:

SELECT name FROM sqlite_master WHERE type == 'index' AND tbl_name == 'table Name' 

Затем на вашем языке, итерация подумал о результатах и ​​опустил их

FOR x IN RESULTSET 
    SQL = "DROP INDEX " & X 
0
#!/bin/bash 

DB=your_sqlite.db 
TABLE="some_table" 

INDEXES="$(echo "SELECT name FROM sqlite_master WHERE type == 'index' AND tbl_name = '$TABLE;" | sqlite3 $DB)" 
for i in $INDEXES; do 
    echo "DROP INDEX '$i';" | sqlite3 $DB 
done 

Убедитесь никакой другой процесс не обращается к базе данных, в то время как вы называете этот сценарий, или, если это еще не возможно добавить

PRAGMA busy_timeout=20000; 

в каждом echo, что вы посылаете в базу данных

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