TimescaleDB 1.1.1删除数据未释放空间,如何删除超表分块?
TimescaleDB 1.1.1 删除超表分块并释放磁盘空间方案
一、解决drop_chunks报错问题
TimescaleDB 1.1.1版本不支持新版的命名参数写法,必须使用位置参数,且表名需显式转换为regclass类型,修正后的执行语句如下:
-- 基础写法(默认schema) SELECT drop_chunks('mydatatable'::regclass, INTERVAL '9 months'); -- 若表属于指定schema(如public) SELECT drop_chunks('public.mydatatable'::regclass, INTERVAL '9 months');
执行后可通过以下语句验证分块是否被成功删除:
SELECT show_chunks('mydatatable');
二、释放DELETE操作残留的磁盘空间
你之前通过DELETE删除半数行,这类行级删除产生的死元组不会立即释放空间给操作系统,VACUUM ANALYZE仅清理死元组但不回收磁盘空间,需针对超表的每个分块执行VACUUM FULL:
- 查询当前超表的所有分块:
SELECT relname FROM pg_class WHERE relname LIKE 'mydatatable_%';
- 逐个对分块执行
VACUUM FULL(替换示例中的分块名):
VACUUM FULL public.mydatatable_12345;
注意:
VACUUM FULL会锁定目标分块表,建议在业务低峰期操作。
三、验证空间释放效果
执行完上述操作后,可通过以下方式确认磁盘空间是否释放:
- 操作系统层面:执行
df -h查看对应磁盘分区的使用情况 - PostgreSQL层面:查询超表总占用空间
SELECT pg_size_pretty(pg_total_relation_size('mydatatable'));
内容的提问来源于stack exchange,提问作者WeSee
相关产品推荐
相关产品推荐

