我有一个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>
Run Code Online (Sandbox Code Playgroud)
我知道这些错误通常是权限错误(我已经阅读了有关StackOverflow上此主题的所有问题),但我确信这不是我的情况:
确保您的进程可以访问TEMP目录.
从SQLite的临时磁盘文件的使用文档:
SQLite可以利用瞬态索引来实现SQL语言功能,例如:
- ORDER BY或GROUP BY子句
- 聚合查询中的DISTINCT关键字
- 由UNION,EXCEPT或INTERSECT连接的复合SELECT语句
每个瞬态索引都存储在自己的临时文件中.临时索引的临时文件会在使用它的语句末尾自动删除.
您可以通过将temp_storepragma设置为MEMORY:来验证临时存储是否是问题:
PRAGMA temp_store = MEMORY;
Run Code Online (Sandbox Code Playgroud)
告诉SQLite将GROUP BY子句的瞬态索引保留在内存中.
或者,在要分组的列上创建显式索引,以防止创建瞬态索引.
| 归档时间: |
|
| 查看次数: |
1649 次 |
| 最近记录: |