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

时间:2013-04-24 11:12:01

标签: 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>

我知道这些错误通常是权限错误(我已经阅读了有关StackOverflow上此主题的所有问题),但我确信这不是我的情况:

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

1 个答案:

答案 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子句的瞬态索引保留在内存中。

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