我们最近对具有数百万行的主表进行了分区。此表按“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;
在其他数据不多的环境中对该表进行分区时,我们从未遇到过这个问题。这可能是由于分区期间未释放的磁盘空间造成的吗?