我有一张桌子占用了我们服务器上接近 90% 的高清空间。我决定删除几列以释放空间。但我需要将空间归还给操作系统。但是,问题是我不确定如果我运行 VACUUM FULL 并且没有足够的可用空间来制作表的副本会发生什么。
我知道不应使用 VACUUM FULL,但我认为这是这种情况下的最佳选择。
任何想法,将不胜感激。
我正在使用 PostgreSQL 9.0.6
VACUUM通常不会将磁盘空间返回给操作系统,除非在某些特殊情况下。
从文档:
VACUUM删除表和索引中的死行版本并标记可用空间以供将来重用的标准形式。但是,它不会将空间返回给操作系统,除非在表末尾的一个或多个页面完全空闲并且可以轻松获得排他表锁的特殊情况下。相比之下,VACUUM FULL通过编写一个没有死空间的完整新版本的表文件来主动压缩表。这最大限度地减少了表的大小,但可能需要很长时间。它还需要额外的磁盘空间用于表的新副本,直到操作完成。
问题是:如何实现这个数据库状态one or more pages at the end of a table become entirely free?这可以通过 完成VACUUM FULL,但我没有足够的空间来实现它。那么还有没有其他可能呢?