尽管没有条目,Postgresql分区表仍在使用空间

时间:2016-11-07 10:08:14

标签: postgresql database-partitioning pg-partman

我们最近分区了一个包含数百万行的主表。该表由“id范围”分区。在此主表下创建了7个子表,并且在插入期间条目将进入子表。所有这些都由pg_partman扩展程序管理。

运行此查询时,主表显示占用大约300GB的磁盘空间。这很奇怪,因为这个表没有条目,我可以通过运行check_parent()函数来确认。

SELECT nspname || '.' || relname AS "relation",pg_size_pretty(pg_relation_size(C.oid)) AS "size"  FROM pg_class C  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')  ORDER BY pg_relation_size(C.oid) DESC  LIMIT 30;

我们从未在其他环境中对此表进行分区时遇到此问题,而其他环境中的数据并不多。这可能是由于分区期间未释放的磁盘空间造成的吗?

1 个答案:

答案 0 :(得分:0)

是的,这肯定是由于未发布的磁盘空间。在将数据移动到不同的结构(如分区表)之后,您应该执行VACUUM FULL

PostgreSQL通常不会自动释放表空间。正常(自动)VACUUM ANALYZE维护数据库但不收缩磁盘上的表。但是VACUUM FULL会锁定表格,因此请注意不要在正常操作时间内运行它。