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),层次结构是:

  • SQLITE_TMPDIR环境变量指定的内容
  • TMPDIR环境变量指定的内容
  • /var/tmp
  • /usr/tmp
  • /tmp,最后
  • 当前工作目录
  • 对于Cygwin来说,层次结构是:

  • SQLITE_TMPDIR环境变量指定的内容
  • TMPDIR环境变量指定的内容
  • 无论TMP环境变量指定了什么
  • 无论TEMP环境变量指定了什么
  • USERPROFILE环境变量指定的内容
  • /var/tmp
  • /usr/tmp
  • /tmp,最后
  • 当前工作目录
  • 对于窗口来说,层次结构是:

    • GetTempPath(),它被记录为返回:

    • 无论TMP环境变量指定了什么
    • 无论TEMP环境变量指定了什么
    • USERPROFILE环境变量指定的内容,以及
    • Windows目录

    希望这能有所帮助。

    OP注意到,在真空期间,SQLite会创建一个与原始数据库大小大致相同的临时文件。它这样做是为了维护数据库的ACID属性。SQLite使用一个目录来保存真空吸尘时所需的临时文件。为了确定要使用的目录,它会从一个层次结构中向下搜索第一个具有适当访问权限的目录。如果它找到一个它无权访问的目录,它将忽略该目录,并继续在层次结构中向下搜索它可以访问的目录。我提到这一点是为了防止任何人指定了环境变量,而SQLite似乎忽略了它

    在他的回答中,CL给出了Linux的层次结构,并且在他的评论中提到层次结构依赖于操作系统。为了完整起见,这里是层次结构(就我从代码中可以确定的范围而言)

    对于Unix(和Linux),层次结构是:

  • SQLITE_TMPDIR环境变量指定的内容
  • TMPDIR环境变量指定的内容
  • /var/tmp
  • /usr/tmp
  • /tmp,最后
  • 当前工作目录
  • 对于Cygwin来说,层次结构是:

  • SQLITE_TMPDIR环境变量指定的内容
  • TMPDIR环境变量指定的内容
  • 无论TMP环境变量指定了什么
  • 无论TEMP环境变量指定了什么
  • USERPROFILE环境变量指定的内容
  • /var/tmp
  • /usr/tmp
  • /tmp,最后
  • 当前工作目录
  • 对于窗口来说,层次结构是:

    • GetTempPath(),它被记录为返回:

    • 无论TMP环境变量指定了什么
    • 无论TEMP环境变量指定了什么
    • USERPROFILE环境变量指定的内容,以及
    • Windows目录
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda2       406G  171G  215G  45% /home