2011-11-03 5 views
3

Un programme sur lequel je travaille peut importer des données d'un autre programme (pas le nôtre) qui utilise des fichiers sqlite. J'ai besoin d'indices qui n'existent pas déjà dans les fichiers sqlite, mais je ne veux pas avoir à modifier les données de quelqu'un juste pour les laisser l'importer. L'index est utilisé par de nombreuses requêtes. Ainsi, je voudrais créer un indice de température qui ne vit que tant que la connexionEst-il possible de créer un index temporaire en sqlite?

Je l'ai vu la syntaxe suivante évidente référence (dans des listes de diffusion des messages de 2003 ...):

$ sqlite3 thirdparty.sqlite 
SQLite version 3.7.4 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> CREATE TEMP INDEX foo ON SomeTable(SomeCol); 
Error: near "INDEX": syntax error 

Est-il possible de faire quelque chose comme ça? À l'heure actuelle, nous faisons juste une copie du fichier avant l'importation, mais ces fichiers peuvent être assez volumineux, ce qui est plutôt peu pratique.

+1

Si je peux suggérer (pour l'avenir, comme la question est déjà un peu ancienne), l'ajout et l'index, la suppression de l'index et l'exécution de VACUUM, ne modifieraient en aucune façon la base de données. Il y a également très peu de risque de corruption des données, ce qui peut se produire uniquement si votre disque a des secteurs défectueux. –

Répondre

3

Des index TEMPORAIRES ont été ajoutés temporairement mais ont été supprimés rapidement, car la cohérence n'a pas pu être garantie. Bien que cela ne devrait pas poser de problème si l'index ne dure qu'une transaction (ce qui provoquerait un verrouillage exclusif et empêcherait ainsi toute modification), ce n'est pas la façon dont ils ont été implémentés. Donc, à ce jour, les index temporaires ne sont pas disponibles pour sqlite. Pour plus de détails, voir http://permalink.gmane.org/gmane.comp.db.sqlite.general/4827.

Questions connexes