我有一个python脚本,可以从一些外部数据中创建一个sqlite数据库。这很好用。但每次我在这个数据库上执行GROUP BY查询时,都会出现“错误:无法打开数据库文件”。正常的SELECT查询工作。
这对于python的sqlite3库和sqlite3 cli二进制文件都是一个问题:
sqlite> SELECT count(*) FROM REC;
count(*)
----------
528489
sqlite> SELECT count(*) FROM REC GROUP BY VERSION;
Error: unable to open database file
sqlite>
我知道这些错误通常是权限错误(我已经阅读了有关StackOverflow上此主题的所有问题),但我确信这不是我的情况:
答案 0 :(得分:6)
确保您的进程可以访问TEMP目录。
来自SQLite's Use Of Temporary Disk Files文档:
SQLite可以利用瞬态索引来实现SQL语言 功能如:
- ORDER BY或GROUP BY子句
- 汇总查询中的DISTINCT关键字
- 由UNION,EXCEPT或INTERSECT
连接的复合SELECT语句每个瞬态索引都存储在自己的临时文件中。该 临时索引的临时文件会自动删除 使用它的语句的结尾。
您可以通过将temp_store
pragma设置为MEMORY
来验证临时存储是否存在问题:
PRAGMA temp_store = MEMORY;
告诉SQLite将GROUP BY
子句的瞬态索引保留在内存中。
或者,在要分组的列上创建显式索引,以防止创建瞬态索引。