Truncate不会物理释放磁盘空间

时间:2015-05-16 09:22:46

标签: java spring postgresql spring-data spring-data-jpa

我正在使用spring-dataCrudRepository进行任何数据库访问。每天一次,我还必须截断一个包含大约100GB数据的缓存表并重建它。

问题:表被成功截断(我验证了表是空的),但是文件没有从数据库的硬盘中物理删除!

interface MyTableRepository extends CrudRepository<MyTableEntity, Long> {
    @Query(value = "TRUNCATE TABLE my_table", nativeQuery = true)
    @Modifying
    @Transactional
    void truncateTable();
}

因此,硬盘空间日益减少。 我注意到的是:如果我关闭我的java应用程序,那么truncated表的postgres部分之前会立即被删除!

这可能是什么原因?

当我使用pgAdmin截断同一个表时,磁盘空间将按预期释放。

1 个答案:

答案 0 :(得分:0)

有两个可能的原因

  1. PostgresSQL会在真空后删除此索引文件。等等或自己抽真空

  2. 在退出此java程序

  3. 之前,SQL不会被提交