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。
我目前有一个 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。