aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Bossart <nathan@postgresql.org>2023-07-19 15:26:52 -0700
committerNathan Bossart <nathan@postgresql.org>2023-07-19 15:26:52 -0700
commitcdaedfc96d1488069518d42479125ceb9a5e67d0 (patch)
treeb9cb79dabfd327e1563b1a2dc0bdd5599e268aa4
parent018b61f81b4aa3c85e2d671d056681ff5c765475 (diff)
downloadpostgresql-cdaedfc96d1488069518d42479125ceb9a5e67d0.tar.gz
postgresql-cdaedfc96d1488069518d42479125ceb9a5e67d0.zip
Support parenthesized syntax for CLUSTER without a table name.
b5913f6120 added a parenthesized syntax for CLUSTER, but it requires specifying a table name. This is unlike commands such as VACUUM and ANALYZE, which do not require specifying a table in the parenthesized syntax. This change resolves this inconsistency. This is preparatory work for a follow-up commit that will move the unparenthesized syntax to the "Compatibility" section of the CLUSTER documentation. Reviewed-by: Melanie Plageman, Michael Paquier Discussion: https://postgr.es/m/CAAKRu_bc5uHieG1976kGqJKxyWtyQt9yvktjsVX%2Bi7NOigDjOA%40mail.gmail.com
-rw-r--r--doc/src/sgml/ref/cluster.sgml2
-rw-r--r--src/backend/parser/gram.y12
2 files changed, 12 insertions, 2 deletions
diff --git a/doc/src/sgml/ref/cluster.sgml b/doc/src/sgml/ref/cluster.sgml
index e308e2ce912..b6d5655c194 100644
--- a/doc/src/sgml/ref/cluster.sgml
+++ b/doc/src/sgml/ref/cluster.sgml
@@ -21,7 +21,7 @@ PostgreSQL documentation
<refsynopsisdiv>
<synopsis>
-CLUSTER [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] <replaceable class="parameter">table_name</replaceable> [ USING <replaceable class="parameter">index_name</replaceable> ]
+CLUSTER [ ( <replaceable class="parameter">option</replaceable> [, ...] ) ] [ <replaceable class="parameter">table_name</replaceable> [ USING <replaceable class="parameter">index_name</replaceable> ] ]
CLUSTER [ VERBOSE ] [ <replaceable class="parameter">table_name</replaceable> [ USING <replaceable class="parameter">index_name</replaceable> ] ]
<phrase>where <replaceable class="parameter">option</replaceable> can be one of:</phrase>
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 91793cb2eff..7a44a374e49 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11553,7 +11553,7 @@ CreateConversionStmt:
/*****************************************************************************
*
* QUERY:
- * CLUSTER (options) <qualified_name> [ USING <index_name> ]
+ * CLUSTER (options) [ <qualified_name> [ USING <index_name> ] ]
* CLUSTER [VERBOSE] [ <qualified_name> [ USING <index_name> ] ]
* CLUSTER [VERBOSE] <index_name> ON <qualified_name> (for pre-8.3)
*
@@ -11569,6 +11569,15 @@ ClusterStmt:
n->params = $3;
$$ = (Node *) n;
}
+ | CLUSTER '(' utility_option_list ')'
+ {
+ ClusterStmt *n = makeNode(ClusterStmt);
+
+ n->relation = NULL;
+ n->indexname = NULL;
+ n->params = $3;
+ $$ = (Node *) n;
+ }
/* unparenthesized VERBOSE kept for pre-14 compatibility */
| CLUSTER opt_verbose qualified_name cluster_index_specification
{
@@ -11581,6 +11590,7 @@ ClusterStmt:
n->params = lappend(n->params, makeDefElem("verbose", NULL, @2));
$$ = (Node *) n;
}
+ /* unparenthesized VERBOSE kept for pre-17 compatibility */
| CLUSTER opt_verbose
{
ClusterStmt *n = makeNode(ClusterStmt);