---
title: "CLUSTER"
id: sql-cluster
pg_version: "20devel"
---
# CLUSTER — cluster a table according to an index
## Synopsis
```
CLUSTER [ ( option [, ...] ) ] [ table_name [ USING index_name ] ]
where option can be one of:
VERBOSE [ boolean ]
```
## Description
The `CLUSTER` command is equivalent to [REPACK](sql-repack.md) with a `USING INDEX` clause. See there for more details.
## Parameters
**`table_name`**
The name (possibly schema-qualified) of a table. **`index_name`**
The name of an index. **`VERBOSE`**
Prints a progress report as each table is clustered at `INFO` level. **`boolean`**
Specifies whether the selected option should be turned on or off. You can write `TRUE`, `ON`, or `1` to enable the option, and `FALSE`, `OFF`, or `0` to disable it. The `boolean` value can also be omitted, in which case `TRUE` is assumed.
## Notes
To cluster a table, one must have the `MAINTAIN` privilege on the table.
While `CLUSTER` is running, the [`search_path` (`string`)](runtime-config-client.md#guc-search-path) is temporarily changed to `pg_catalog, pg_temp`.
Because `CLUSTER` remembers which indexes are clustered, one can cluster the tables one wants clustered manually the first time, then set up a periodic maintenance script that executes `CLUSTER` without any parameters, so that the desired tables are periodically reclustered.
Each backend running `CLUSTER` will report its progress in the pg_stat_progress_cluster view. See [Section 27.4.2](progress-reporting.md#cluster-progress-reporting) for details.
Clustering a partitioned table clusters each of its partitions using the partition of the specified partitioned index. When clustering a partitioned table, the index may not be omitted. `CLUSTER` on a partitioned table cannot be executed inside a transaction block.
## Examples
Cluster the table employees on the basis of its index `employees_ind`:
CLUSTER employees USING employees_ind;
Cluster the employees table using the same index that was used before:
CLUSTER employees;
Cluster all tables in the database that have previously been clustered:
CLUSTER;
## Compatibility
There is no `CLUSTER` statement in the SQL standard.
The following syntax was used before PostgreSQL 17 and is still supported: ```
CLUSTER [ VERBOSE ] [ table_name [ USING index_name ] ]
```
The following syntax was used before PostgreSQL 8.3 and is still supported: ```
CLUSTER index_name ON table_name
```
## See Also
[REPACK](sql-repack.md), [clusterdb](app-clusterdb.md), [Section 27.4.2](progress-reporting.md#cluster-progress-reporting)