我正在尝试VACUUM在我的数据库上运行该命令,但我似乎用完了空间:
> sqlite3 mydatabase.db "VACUUM"
Error: database or disk is full
Run Code Online (Sandbox Code Playgroud)
数据库大约36 GB,我运行它的驱动器看起来像(通过df -h):
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 406G 171G 215G 45% /home
Run Code Online (Sandbox Code Playgroud)
所以我显然高于所需的双倍尺寸限制.我该怎么做才能让vacuum命令运行?
CL.*_*CL. 18
要允许VACUUM命令运行,请将临时文件的目录更改为具有足够可用空间的目录.
SQLite的文档说临时目录是(按顺序):
SQLITE_TMPDIR环境变量设置什么; 要么TMPDIR环境变量设置什么; 要么/var/tmp; 要么/usr/tmp; 要么/tmp; 要么.,当前的工作目录小智 5
该OP指出,真空期间,SQLite的创建一个临时文件近似大小与原始数据库相同。这样做是为了维护数据库ACID属性。SQLite使用目录来保存VACUUM时所需的临时文件。为了确定要使用的目录,它会沿层次结构下降,以查找具有适当访问权限的第一个目录。如果找到无法访问的目录,它将忽略该目录,并继续沿层次结构下降以查找它可以访问的目录。我提到这一点是为了防止有人指定了环境变量,而SQLite似乎忽略了它。
CL在他的回答中给出了Linux的层次结构,并在他的评论中提到该层次结构与OS有关。为了完整起见,这里是层次结构(据我所知,可以从代码中确定它们)。
对于Unix(和Linux),层次结构为:
对于Cygwin,层次结构为:
对于Windows,层次结构为:
GetTempPath(),记录为返回:
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
11719 次 |
| 最近记录: |