GROUP BY查询的"错误:无法打开数据库文件"

the*_*ega 1 sqlite cygwin

我有一个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上此主题的所有问题),但我确信这不是我的情况:

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

Mar*_*ers 6

确保您的进程可以访问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子句的瞬态索引保留在内存中.

或者,在要分组的列上创建显式索引,以防止创建瞬态索引.