PostgreSQL 导入失败仍占用硬盘 space?需要清除缓存?

PostgreSQL failed imports still claim hard disk space? Need to clear cache?

我目前有一个 PostgreSQL(OS X 上的 10.0)数据库,只有一个 table。当我在 table.

中导入 csv 文件时,我注意到一些奇怪的事情

当导入因各种原因失败时(例如,csv 文件中多了一行或给定行的一列中的字符太多),没有行被添加到 table 但 PostgreSQL 仍然声称space 在我的硬盘上。

现在,我有一个非常大的 csv 文件要导入,但它失败了好几次,因为 csv 文件一开始就不合规 - 所以我遇到了很多导入失败的问题,我修复了这些问题并尝试再次导入。我现在意识到我的计算机存储因此减少了 30-50 GB 左右,我的数据库仍然是空的。

谢谢!

向数据库中插入行会增加 table 大小。

即使COPY语句失败,到目前为止已经插入的行仍然在table中,但是它们是死行,因为插入它们的事务失败。

在 PostgreSQL 中,SQL 语句 VACUUM 将释放 space。这通常不会缩小 table,但它使 space 可用于将来的插入。

通常,这是由 autovacuum 守护程序 在后台自动完成的。

有几种可能:

  • 您禁用了 autovacuum。

  • Autovacuum 清理 table 的速度不够快,因此下一次加载还不能重用 space。

你能做什么:

  • 运行 VACUUM (VERBOSE) 在 table 上手动删除死行。

  • 如果要减小 table 大小,运行 VACUUM (FULL) 放在 table 上。这将在操作期间锁定 table。