“sqlite3.OperationalError:数据库或磁盘已满”

问题描述 投票:0回答:4

我的应用程序日志中有此错误:

sqlite3.OperationalError: database or disk is full

由于有足够的磁盘空间可用,并且我的 SQLite 数据库似乎没有损坏(

integrity_check
没有报告任何错误),为什么会发生这种情况以及如何调试它?

我正在使用 Lustre 文件系统(设置了

flock
),到目前为止,它运行得很好。

版本有:

  • Python 2.6.6
  • SQLite 3.3.6
sqlite
4个回答
11
投票

对于原始海报来说可能为时已晚,但我刚刚遇到了这个问题并且找不到答案,所以我将记录我的发现,希望对其他人有所帮助:

事实证明,即使有足够的磁盘空间,SQLite 数据库实际上也可以变满,因为它对数据库文件中的页数有限制:

http://www.sqlite.org/pragma.html#pragma_max_page_count

在我的例子中,该值为 1073741823,这意味着与 1024 字节的页面大小相结合,数据库的最大容量为 1 TB,并返回“

database or disk is full
”错误。

好消息是您可以提高限额;例如,通过发出

PRAGMA max_page_count = 2147483646;
将其加倍。

不过,该限制似乎没有保存在数据库文件中,因此每次打开数据库时都必须在应用程序中运行它。


4
投票

默认情况下,SQLite 使用

/tmp
临时目录(不是内存)。 如果
/tmp
太小,您将得到
disk full
。 在这种情况下,请像这样更改临时目录:
 export TMPDIR=<big file system>


0
投票

在我的 Linux 桌面系统上,我在

~/.cache
中运行
tmpfs
,我看到:

  • sqlite3.OperationalError: database or disk is full

当我的

$USER
缓存已
100%
已满时


-3
投票

我也有同样的问题。 您的主机或 PC 的存储空间已满,因此删除系统中的一些文件即可解决问题。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.