根据 v12文档
带索引扫描的集群需要
磁盘上的可用空间至少等于表大小和索引大小之和
并且具有顺序扫描和排序的集群需要
表大小的两倍,加上索引大小
如果我没有那么多可用空间,有什么办法吗?即它可以以某种方式分部分运行吗?
如果我运行 CLUSTER 命令并且由于可用磁盘空间不足而失败,那么执行的工作是否会完全回滚(如果重要的话,在有或没有任何参数的情况下运行时)?
根据 v12文档
带索引扫描的集群需要
磁盘上的可用空间至少等于表大小和索引大小之和
并且具有顺序扫描和排序的集群需要
表大小的两倍,加上索引大小
如果我没有那么多可用空间,有什么办法吗?即它可以以某种方式分部分运行吗?
如果我运行 CLUSTER 命令并且由于可用磁盘空间不足而失败,那么执行的工作是否会完全回滚(如果重要的话,在有或没有任何参数的情况下运行时)?
是的,postgresql 会回滚事务。
Postgresql 中的几乎所有命令都在事务中运行,因此如果出现问题,该命令将被回滚。
如果 Postgresql 系统表和 WAL 在同一个磁盘上,如果磁盘空间有限,则不要运行此命令。Postgresql 会恐慌并关闭,直到空间被释放。
有几点要记住,
Postgresql 不会按该顺序保留表,因此如果表被大量更新。由于 MVCC,物理排序顺序将很快丢失
必须定期运行 cluster 命令以保持表的物理顺序,从而重新创建有限的磁盘空间问题。
集群的优势在于只读查询按照集群的顺序选择记录集。
如果磁盘空间有限并且在短时间内定期更新/插入表,则表和索引将增长到集群无法重新运行并且真空将无法运行的程度
看起来是时候开始计划添加磁盘空间并将这些表移动到新的 TableSpaces