【发布时间】:2016-08-22 15:20:40
【问题描述】:
根据文档,在 postgresql 中删除行后,它们仍处于死状态,因此需要定期清理以回收此空间。从表中删除列时,这是否也适用于行宽,或者该空间是否永远分配?
【问题讨论】:
标签: postgresql vacuum
根据文档,在 postgresql 中删除行后,它们仍处于死状态,因此需要定期清理以回收此空间。从表中删除列时,这是否也适用于行宽,或者该空间是否永远分配?
【问题讨论】:
标签: postgresql vacuum
答案是是 - 空间被回收。
来自documentation 关于VACUUM(我的粗体强调):
它会写入表的新副本,并且在操作完成之前不会释放旧副本
还有关于ALTER TABLE的页面注释:
要强制立即回收被删除的列占用的空间,您可以执行 ALTER TABLE 的一种形式,该形式执行整个表的重写。这会导致重建每一行,并将删除的列替换为空值。
还有一个:
根据参数,您可能需要重写表格以获得所需的效果。 这可以通过 VACUUM FULL、CLUSTER 或强制表重写的 ALTER TABLE 形式之一来完成。
【讨论】: