1

我有一个 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 上可以找到的关于这个主题的所有问题),但我很确定这不是我的情况:

  1. 我说的是一个容易创建的数据库和读取请求
  2. 我检查了权限:文件及其包含的文件夹都设置了写权限
  3. 我什至可以写入数据库:创建新表没问题。
  4. 该设备未满,它有足够的空间。
4

1 回答 1

6

确保您的进程有权访问 TEMP 目录。

SQLite 的使用临时磁盘文件文档:

SQLite 可以利用瞬态索引来实现 SQL 语言功能,例如:

  • ORDER BY 或 GROUP BY 子句
  • 聚合查询中的 DISTINCT 关键字
  • 由 UNION、EXCEPT 或 INTERSECT 连接的复合 SELECT 语句

每个临时索引都存储在自己的临时文件中。临时索引的临时文件会在使用它的语句结束时自动删除。

您可能可以通过将temp_store编译指示设置为来验证临时存储是否是问题MEMORY

PRAGMA temp_store = MEMORY;

告诉 SQLite 将GROUP BY子句的临时索引保留在内存中。

或者,在要分组的列上创建显式索引,以防止创建临时索引。

于 2013-04-24T11:23:27.053 回答