我有一个PostgreSQL(OS X上的10.0)数据库,目前只有一个表。当我在该表中导入csv文件时,我注意到了一些奇怪的东西。
当导入因各种原因失败时(例如csv文件中的一行额外行或给定行的列中的字符太多),表中没有添加任何行,但PostgreSQL仍声称我的硬盘上有空格
现在,我有一个非常大的csv导入,它失败了几次因为csv不符合开始 - 所以我有很多导入失败,我修复并尝试再次导入。我现在意识到我的计算机存储空间已经减少了30-50 GB左右,因此我的数据库仍然是空的。
谢谢!
答案 0 :(得分:1)
将行插入数据库会增加表的大小。
即使COPY
语句失败,到目前为止已插入的行仍保留在表中,但它们是死行,因为插入它们的事务失败。
在PostgreSQL中,SQL语句VACUUM
将释放该空间。这通常不会缩小表格,但它会使空间可用于将来的插入。
通常,这是由 autovacuum守护程序在后台自动完成的。
有几种可能性:
您已停用autovacuum。
Autovacuum对表的清理速度不够快,因此下一次加载无法重复使用空间。
你能做什么:
在表格上运行VACUUM (VERBOSE)
以手动删除死行。
如果要减小表格大小,请在表格中运行VACUUM (FULL)
。这将在操作期间锁定表格。