aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/cluster.c
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2018-07-24 11:37:32 +0900
committerMichael Paquier <michael@paquier.xyz>2018-07-24 11:37:32 +0900
commit9ebe0572ceab69c57811746ead2d3418daea8673 (patch)
tree965bdf5b17ddc559bb8f39fea8cd51ae48f96d13 /src/backend/commands/cluster.c
parentd9fadbf13103d46c0c6b4b92c62ee13f57524896 (diff)
downloadpostgresql-9ebe0572ceab69c57811746ead2d3418daea8673.tar.gz
postgresql-9ebe0572ceab69c57811746ead2d3418daea8673.zip
Refactor cluster_rel() to handle more options
This extends cluster_rel() in such a way that more options can be added in the future, which will reduce the amount of chunk code for an upcoming SKIP_LOCKED aimed for VACUUM. As VACUUM FULL is a different flavor of CLUSTER, we want to make that extensible to ease integration. This only reworks the API and its callers, without providing anything user-facing. Two options are present now: verbose mode and relation recheck when doing the cluster command work across multiple transactions. This could be used as well as a base to extend the grammar of CLUSTER later on. Author: Michael Paquier Reviewed-by: Nathan Bossart Discussion: https://postgr.es/m/20180723031058.GE2854@paquier.xyz
Diffstat (limited to 'src/backend/commands/cluster.c')
-rw-r--r--src/backend/commands/cluster.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 0112a872241..68be4709771 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -186,7 +186,7 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
heap_close(rel, NoLock);
/* Do the job. */
- cluster_rel(tableOid, indexOid, false, stmt->verbose);
+ cluster_rel(tableOid, indexOid, stmt->options);
}
else
{
@@ -234,7 +234,8 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
/* functions in indexes may want a snapshot set */
PushActiveSnapshot(GetTransactionSnapshot());
/* Do the job. */
- cluster_rel(rvtc->tableOid, rvtc->indexOid, true, stmt->verbose);
+ cluster_rel(rvtc->tableOid, rvtc->indexOid,
+ stmt->options | CLUOPT_RECHECK);
PopActiveSnapshot();
CommitTransactionCommand();
}
@@ -265,9 +266,11 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
* and error messages should refer to the operation as VACUUM not CLUSTER.
*/
void
-cluster_rel(Oid tableOid, Oid indexOid, bool recheck, bool verbose)
+cluster_rel(Oid tableOid, Oid indexOid, int options)
{
Relation OldHeap;
+ bool verbose = ((options & CLUOPT_VERBOSE) != 0);
+ bool recheck = ((options & CLUOPT_RECHECK) != 0);
/* Check for user-requested abort. */
CHECK_FOR_INTERRUPTS();