受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
此文档适用于不受支持的 PostgreSQL 版本。
您可能需要查看当前版本的相同页面,或上面列出的其他受支持版本。

CLUSTER

CLUSTER — 按照一个索引对表进行聚簇

Synopsis

CLUSTER [ ( option [, ...] ) ] [ table_name [ USING index_name ] ]

其中 option 可以是以下之一:

    VERBOSE [ boolean ]

描述

CLUSTER 命令等价于带 USING INDEX 子句的 REPACK。更多细节参见那里。

参数

table_name #

表的名称(可能是模式限定的)。

index_name #

索引的名称。

VERBOSE #

在每个表被聚簇时,以 INFO 级别打印进度报告。

boolean #

指定是否启用所选选项。你可以写 TRUEON1 来启用该选项, 也可以写 FALSEOFF0 来禁用它。也可以省略 boolean 值,此时默认假定为 TRUE

注解

要对表执行聚簇,必须在该表上具有 MAINTAIN 权限。

CLUSTER 执行期间,search_path 会被临时设置为 pg_catalog, pg_temp

因为 CLUSTER 会记住哪些索引已被设为聚簇索引, 你可以第一次先手工聚簇需要聚簇的表,然后设置一个定期运行的维护脚 本,执行不带任何参数的 CLUSTER,这样这些表就会 被周期性地重新聚簇。

每个运行 CLUSTER 的后端都会在 pg_stat_progress_cluster 视图中报告其进度。 有关详细信息,请参见 Section 27.4.5

对分区表进行聚簇时,会使用指定分区索引在各分区上的对应分区索引来 聚簇每个分区。对分区表执行聚簇时,索引不可省略。 对分区表执行 CLUSTER 不能在事务块内进行。

示例

按照索引 employees_ind 对表 employees 进行聚簇:

CLUSTER employees USING employees_ind;

使用之前用过的同一个索引对 employees 表进行聚簇:

CLUSTER employees;

对数据库中此前已聚簇过的所有表执行聚簇:

CLUSTER;

兼容性

SQL 标准中没有 CLUSTER 语句。

以下语法在 PostgreSQL 17 之前使用,当前仍受支持:

CLUSTER [ VERBOSE ] [ table_name [ USING index_name ] ]

以下语法在 PostgreSQL 8.3 之前使用,当前仍受支持:

CLUSTER index_name ON table_name