Database PostgreSQL导入失败仍然占用硬盘空间?需要清除缓存吗?

Database PostgreSQL导入失败仍然占用硬盘空间?需要清除缓存吗?,database,postgresql,csv,caching,storage,Database,Postgresql,Csv,Caching,Storage,目前我有一个PostgreSQL(OSX上的10.0)数据库,只有一个表。当我在那个表中导入csv文件时,我注意到了一些奇怪的事情 当导入因各种原因(例如csv文件中的一个额外行或给定行的一列中的字符太多)而失败时,不会向表中添加任何行,但PostgreSQL仍会占用硬盘上的空间 现在,我有一个非常大的csv导入,它失败了好几次,因为csv不符合开始-所以我有吨导入失败,我修复,并试图再次导入。我现在意识到,我的计算机存储空间因此减少了30-50GB左右,而我的数据库仍然是空的 这正常吗 我怀

目前我有一个PostgreSQL(OSX上的10.0)数据库,只有一个表。当我在那个表中导入csv文件时,我注意到了一些奇怪的事情

当导入因各种原因(例如csv文件中的一个额外行或给定行的一列中的字符太多)而失败时,不会向表中添加任何行,但PostgreSQL仍会占用硬盘上的空间

现在,我有一个非常大的csv导入,它失败了好几次,因为csv不符合开始-所以我有吨导入失败,我修复,并试图再次导入。我现在意识到,我的计算机存储空间因此减少了30-50GB左右,而我的数据库仍然是空的

  • 这正常吗
  • 我怀疑这在我的数据库缓存中的某个地方。有没有办法清除缓存,或者必须完全重新安装数据库

谢谢

将行插入数据库将增加表的大小

即使
COPY
语句失败,到目前为止插入的行仍保留在表中,但它们是死行,因为插入它们的事务失败了

在PostgreSQL中,SQL语句
VACUUM
将释放该空间。这通常不会缩小表,但会为将来的插入提供空间

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

有几种可能性:

  • 您禁用了自动真空

  • Autovacuum清理工作台的速度不够快,因此下一次装载时无法重新使用空间

你能做什么:

  • 在工作台上运行
    VACUUM(VERBOSE)
    ,手动删除死行

  • 如果要减小工作台的尺寸,请在工作台上运行
    VACUUM(FULL)
    。这将在操作期间锁定表


成功回收100 Gb