SQLITE3真空,“;“数据库或磁盘已满”;
我正试图在我的数据库上运行SQLITE3真空,“;“数据库或磁盘已满”;,sqlite,Sqlite,我正试图在我的数据库上运行VACUUM命令,但空间似乎用完了: > sqlite3 mydatabase.db "VACUUM" Error: database or disk is full 数据库大约是36 GB,我运行它的驱动器看起来像(通过df-h): 因此,我显然超出了所需的双倍尺寸限制。我该怎么做才能让真空命令运行?可能是创建临时文件的驱动器没有足够的空间。看这里 创建临时文件的驱动器可能没有足够的空间。看这里 要运行真空命令,请将临时文件的目录更改为具有足够可用空间的目录
VACUUM
命令,但空间似乎用完了:
> sqlite3 mydatabase.db "VACUUM"
Error: database or disk is full
数据库大约是36 GB,我运行它的驱动器看起来像(通过df-h
):
因此,我显然超出了所需的双倍尺寸限制。我该怎么做才能让真空命令运行?可能是创建临时文件的驱动器没有足够的空间。看这里
创建临时文件的驱动器可能没有足够的空间。看这里
要运行真空命令,请将临时文件的目录更改为具有足够可用空间的目录 SQLite说临时目录是(按顺序):
SQLITE\u TMPDIR
环境变量设置的内容;或TMPDIR
环境变量设置的内容;或/var/tmp
;或/usr/tmp
;或/tmp
;或
,当前工作目录要允许VACUUM命令运行,请将临时文件的目录更改为具有足够可用空间的目录 SQLite说临时目录是(按顺序):
SQLITE\u TMPDIR
环境变量设置的内容;或TMPDIR
环境变量设置的内容;或/var/tmp
;或/usr/tmp
;或/tmp
;或
,当前工作目录OP指出,在真空期间,SQLite创建一个临时文件,该文件的大小与原始数据库大致相同。它这样做是为了维护数据库的ACID属性。SQLite使用一个目录来保存真空吸尘时所需的临时文件。为了确定要使用的目录,它会从一个层次结构中向下搜索第一个具有适当访问权限的目录。如果它找到一个它无权访问的目录,它将忽略该目录,并继续在层次结构中向下搜索它可以访问的目录。我提到这一点是为了防止任何人指定了环境变量,而SQLite似乎忽略了它 在他的回答中,CL给出了Linux的层次结构,并且在他的评论中提到层次结构依赖于操作系统。为了完整起见,这里是层次结构(就我从代码中可以确定的范围而言) 对于Unix(和Linux),层次结构是:
- GetTempPath(),它被记录为返回:
- 无论TMP环境变量指定了什么
- 无论TEMP环境变量指定了什么
- USERPROFILE环境变量指定的内容,以及
- Windows目录
希望这能有所帮助。OP注意到,在真空期间,SQLite会创建一个与原始数据库大小大致相同的临时文件。它这样做是为了维护数据库的ACID属性。SQLite使用一个目录来保存真空吸尘时所需的临时文件。为了确定要使用的目录,它会从一个层次结构中向下搜索第一个具有适当访问权限的目录。如果它找到一个它无权访问的目录,它将忽略该目录,并继续在层次结构中向下搜索它可以访问的目录。我提到这一点是为了防止任何人指定了环境变量,而SQLite似乎忽略了它 在他的回答中,CL给出了Linux的层次结构,并且在他的评论中提到层次结构依赖于操作系统。为了完整起见,这里是层次结构(就我从代码中可以确定的范围而言) 对于Unix(和Linux),层次结构是:
- GetTempPath(),它被记录为返回:
- 无论TMP环境变量指定了什么
- 无论TEMP环境变量指定了什么
- USERPROFILE环境变量指定的内容,以及
- Windows目录
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 406G 171G 215G 45% /home