【问题标题】:Sqlite drop table error: database or disk is fullSqlite drop table 错误:数据库或磁盘已满
【发布时间】:2021-10-17 02:00:47
【问题描述】:

我有一个 SQLite 数据库,我在其中复制了一个表 (~80gb),以便为其添加一个自动增量索引。生成的数据库大小为 167GB。成功复制表格后,我现在想删除原始表格。但是,我收到一个错误:

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

这是我的查询:

drop table listens;

我的磁盘上还有 18GB 的​​空间和 32GB 的 RAM。 作为一个新手,由于磁盘空间不足,删除表会出错,这对我来说似乎是不直观的。任何想法正在发生什么以及如何解决它?

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    我怀疑 SQLite 想先将生成的 DB 写入临时文件,并且暂时需要磁盘空间才能执行此操作。

    这个临时文件(或者可能是多个文件)的存储位置取自变量SQLITE_TMPDIR(如果设置了——我不确定默认值,可能是/tmp)。将其设置为某个目录,该目录的可用磁盘空间与数据库的大小大致相同。 (如果可用磁盘空间是 DB 大小减去要删除的表的大小就足够了。)

    代码示例(假设您在 Linux 或其他类 unix 系统上遇到此问题):

    $ env SQLITE_TMPDIR=/mnt/tmp sqlite3 some.db
    sqlite> drop table listens;
    

    实际目录可能会有所不同。我在示例中使用了/mnt/tmp,因为这是一个常见的临时挂载点,例如对于空的 U 盘、U 盘、LVM 逻辑卷等。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 2021-04-06
      相关资源
      最近更新 更多