Skip to content

Commit a378555

Browse files
committed
CLUSTER VERBOSE and corresponding clusterdb --verbose option
Jim Cox and Peter Eisentraut
1 parent 6f6a6d8 commit a378555

File tree

8 files changed

+71
-32
lines changed

8 files changed

+71
-32
lines changed

doc/src/sgml/ref/cluster.sgml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/cluster.sgml,v 1.45 2008/11/14 10:22:45 petere Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/cluster.sgml,v 1.46 2008/11/24 08:46:03 petere Exp $
33
PostgreSQL documentation
44
-->
55

@@ -21,8 +21,8 @@ PostgreSQL documentation
2121

2222
<refsynopsisdiv>
2323
<synopsis>
24-
CLUSTER <replaceable class="PARAMETER">tablename</replaceable> [ USING <replaceable class="PARAMETER">indexname</replaceable> ]
25-
CLUSTER
24+
CLUSTER [VERBOSE] <replaceable class="PARAMETER">tablename</replaceable> [ USING <replaceable class="PARAMETER">indexname</replaceable> ]
25+
CLUSTER [VERBOSE]
2626
</synopsis>
2727
</refsynopsisdiv>
2828

@@ -95,6 +95,15 @@ CLUSTER
9595
</para>
9696
</listitem>
9797
</varlistentry>
98+
99+
<varlistentry>
100+
<term><literal>VERBOSE</literal></term>
101+
<listitem>
102+
<para>
103+
Prints a progress report as each table is clustered.
104+
</para>
105+
</listitem>
106+
</varlistentry>
98107
</variablelist>
99108
</refsect1>
100109

doc/src/sgml/ref/clusterdb.sgml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/clusterdb.sgml,v 1.23 2007/12/11 19:57:32 tgl Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/clusterdb.sgml,v 1.24 2008/11/24 08:46:03 petere Exp $
33
PostgreSQL documentation
44
-->
55

@@ -23,12 +23,14 @@ PostgreSQL documentation
2323
<cmdsynopsis>
2424
<command>clusterdb</command>
2525
<arg rep="repeat"><replaceable>connection-option</replaceable></arg>
26+
<group><arg>--verbose</arg><arg>-v</arg></group>
2627
<arg>--table | -t <replaceable>table</replaceable> </arg>
2728
<arg><replaceable>dbname</replaceable></arg>
2829
<sbr>
2930
<command>clusterdb</command>
3031
<arg rep="repeat"><replaceable>connection-option</replaceable></arg>
3132
<group><arg>--all</arg><arg>-a</arg></group>
33+
<group><arg>--verbose</arg><arg>-v</arg></group>
3234
</cmdsynopsis>
3335
</refsynopsisdiv>
3436

@@ -117,6 +119,16 @@ PostgreSQL documentation
117119
</listitem>
118120
</varlistentry>
119121

122+
<varlistentry>
123+
<term><option>-v</></term>
124+
<term><option>--verbose</></term>
125+
<listitem>
126+
<para>
127+
Print detailed information during processing.
128+
</para>
129+
</listitem>
130+
</varlistentry>
131+
120132
</variablelist>
121133
</para>
122134

src/backend/commands/cluster.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.178 2008/10/14 17:19:50 alvherre Exp $
14+
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.179 2008/11/24 08:46:03 petere Exp $
1515
*
1616
*-------------------------------------------------------------------------
1717
*/
@@ -61,7 +61,7 @@ typedef struct
6161
} RelToCluster;
6262

6363

64-
static void cluster_rel(RelToCluster *rv, bool recheck);
64+
static void cluster_rel(RelToCluster *rv, bool recheck, bool verbose);
6565
static void rebuild_relation(Relation OldHeap, Oid indexOid);
6666
static TransactionId copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex);
6767
static List *get_tables_to_cluster(MemoryContext cluster_context);
@@ -177,7 +177,7 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
177177
heap_close(rel, NoLock);
178178

179179
/* Do the job */
180-
cluster_rel(&rvtc, false);
180+
cluster_rel(&rvtc, false, stmt->verbose);
181181
}
182182
else
183183
{
@@ -226,7 +226,7 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
226226
StartTransactionCommand();
227227
/* functions in indexes may want a snapshot set */
228228
PushActiveSnapshot(GetTransactionSnapshot());
229-
cluster_rel(rvtc, true);
229+
cluster_rel(rvtc, true, stmt->verbose);
230230
PopActiveSnapshot();
231231
CommitTransactionCommand();
232232
}
@@ -254,7 +254,7 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
254254
* them incrementally while we load the table.
255255
*/
256256
static void
257-
cluster_rel(RelToCluster *rvtc, bool recheck)
257+
cluster_rel(RelToCluster *rvtc, bool recheck, bool verbose)
258258
{
259259
Relation OldHeap;
260260

@@ -344,6 +344,10 @@ cluster_rel(RelToCluster *rvtc, bool recheck)
344344
check_index_is_clusterable(OldHeap, rvtc->indexOid, recheck);
345345

346346
/* rebuild_relation does all the dirty work */
347+
ereport(verbose ? INFO : DEBUG2,
348+
(errmsg("clustering \"%s.%s\"",
349+
get_namespace_name(RelationGetNamespace(OldHeap)),
350+
RelationGetRelationName(OldHeap))));
347351
rebuild_relation(OldHeap, rvtc->indexOid);
348352

349353
/* NB: rebuild_relation does heap_close() on OldHeap */

src/backend/nodes/copyfuncs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* Portions Copyright (c) 1994, Regents of the University of California
1616
*
1717
* IDENTIFICATION
18-
* $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.412 2008/11/15 19:43:46 tgl Exp $
18+
* $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.413 2008/11/24 08:46:03 petere Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -2293,6 +2293,7 @@ _copyClusterStmt(ClusterStmt *from)
22932293

22942294
COPY_NODE_FIELD(relation);
22952295
COPY_STRING_FIELD(indexname);
2296+
COPY_SCALAR_FIELD(verbose) ;
22962297

22972298
return newnode;
22982299
}

src/backend/nodes/equalfuncs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* Portions Copyright (c) 1994, Regents of the University of California
2323
*
2424
* IDENTIFICATION
25-
* $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.337 2008/11/15 19:43:46 tgl Exp $
25+
* $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.338 2008/11/24 08:46:03 petere Exp $
2626
*
2727
*-------------------------------------------------------------------------
2828
*/
@@ -1032,6 +1032,7 @@ _equalClusterStmt(ClusterStmt *a, ClusterStmt *b)
10321032
{
10331033
COMPARE_NODE_FIELD(relation);
10341034
COMPARE_STRING_FIELD(indexname);
1035+
COMPARE_SCALAR_FIELD(verbose);
10351036

10361037
return true;
10371038
}

src/backend/parser/gram.y

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.639 2008/11/21 11:47:55 petere Exp $
14+
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.640 2008/11/24 08:46:03 petere Exp $
1515
*
1616
* HISTORY
1717
* AUTHOR DATE MAJOR EVENT
@@ -5781,33 +5781,36 @@ CreateConversionStmt:
57815781
/*****************************************************************************
57825782
*
57835783
* QUERY:
5784-
* CLUSTER <qualified_name> [ USING <index_name> ]
5785-
* CLUSTER
5786-
* CLUSTER <index_name> ON <qualified_name> (for pre-8.3)
5784+
* CLUSTER [VERBOSE] <qualified_name> [ USING <index_name> ]
5785+
* CLUSTER [VERBOSE]
5786+
* CLUSTER [VERBOSE] <index_name> ON <qualified_name> (for pre-8.3)
57875787
*
57885788
*****************************************************************************/
57895789

57905790
ClusterStmt:
5791-
CLUSTER qualified_name cluster_index_specification
5791+
CLUSTER opt_verbose qualified_name cluster_index_specification
57925792
{
57935793
ClusterStmt *n = makeNode(ClusterStmt);
5794-
n->relation = $2;
5795-
n->indexname = $3;
5794+
n->relation = $3;
5795+
n->indexname = $4;
5796+
n->verbose = $2;
57965797
$$ = (Node*)n;
57975798
}
5798-
| CLUSTER
5799+
| CLUSTER opt_verbose
57995800
{
58005801
ClusterStmt *n = makeNode(ClusterStmt);
58015802
n->relation = NULL;
58025803
n->indexname = NULL;
5804+
n->verbose = $2;
58035805
$$ = (Node*)n;
58045806
}
58055807
/* kept for pre-8.3 compatibility */
5806-
| CLUSTER index_name ON qualified_name
5808+
| CLUSTER opt_verbose index_name ON qualified_name
58075809
{
58085810
ClusterStmt *n = makeNode(ClusterStmt);
5809-
n->relation = $4;
5810-
n->indexname = $2;
5811+
n->relation = $5;
5812+
n->indexname = $3;
5813+
n->verbose = $2;
58115814
$$ = (Node*)n;
58125815
}
58135816
;

src/bin/scripts/clusterdb.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
* Portions Copyright (c) 2002-2008, PostgreSQL Global Development Group
66
*
7-
* $PostgreSQL: pgsql/src/bin/scripts/clusterdb.c,v 1.20 2008/01/01 19:45:56 momjian Exp $
7+
* $PostgreSQL: pgsql/src/bin/scripts/clusterdb.c,v 1.21 2008/11/24 08:46:04 petere Exp $
88
*
99
*-------------------------------------------------------------------------
1010
*/
@@ -14,11 +14,11 @@
1414
#include "dumputils.h"
1515

1616

17-
static void cluster_one_database(const char *dbname, const char *table,
17+
static void cluster_one_database(const char *dbname, bool verbose, const char *table,
1818
const char *host, const char *port,
1919
const char *username, bool password,
2020
const char *progname, bool echo);
21-
static void cluster_all_databases(const char *host, const char *port,
21+
static void cluster_all_databases(bool verbose, const char *host, const char *port,
2222
const char *username, bool password,
2323
const char *progname, bool echo, bool quiet);
2424

@@ -38,6 +38,7 @@ main(int argc, char *argv[])
3838
{"dbname", required_argument, NULL, 'd'},
3939
{"all", no_argument, NULL, 'a'},
4040
{"table", required_argument, NULL, 't'},
41+
{"verbose", no_argument, NULL, 'v'},
4142
{NULL, 0, NULL, 0}
4243
};
4344

@@ -54,13 +55,14 @@ main(int argc, char *argv[])
5455
bool quiet = false;
5556
bool alldb = false;
5657
char *table = NULL;
58+
bool verbose = false;
5759

5860
progname = get_progname(argv[0]);
5961
set_pglocale_pgservice(argv[0], "pgscripts");
6062

6163
handle_help_version_opts(argc, argv, "clusterdb", help);
6264

63-
while ((c = getopt_long(argc, argv, "h:p:U:Weqd:at:", long_options, &optindex)) != -1)
65+
while ((c = getopt_long(argc, argv, "h:p:U:Weqd:at:v", long_options, &optindex)) != -1)
6466
{
6567
switch (c)
6668
{
@@ -91,6 +93,9 @@ main(int argc, char *argv[])
9193
case 't':
9294
table = optarg;
9395
break;
96+
case 'v':
97+
verbose = true;
98+
break;
9499
default:
95100
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
96101
exit(1);
@@ -128,7 +133,7 @@ main(int argc, char *argv[])
128133
exit(1);
129134
}
130135

131-
cluster_all_databases(host, port, username, password,
136+
cluster_all_databases(verbose, host, port, username, password,
132137
progname, echo, quiet);
133138
}
134139
else
@@ -143,7 +148,7 @@ main(int argc, char *argv[])
143148
dbname = get_user_name(progname);
144149
}
145150

146-
cluster_one_database(dbname, table,
151+
cluster_one_database(dbname, verbose, table,
147152
host, port, username, password,
148153
progname, echo);
149154
}
@@ -153,7 +158,7 @@ main(int argc, char *argv[])
153158

154159

155160
static void
156-
cluster_one_database(const char *dbname, const char *table,
161+
cluster_one_database(const char *dbname, bool verbose, const char *table,
157162
const char *host, const char *port,
158163
const char *username, bool password,
159164
const char *progname, bool echo)
@@ -165,6 +170,8 @@ cluster_one_database(const char *dbname, const char *table,
165170
initPQExpBuffer(&sql);
166171

167172
appendPQExpBuffer(&sql, "CLUSTER");
173+
if (verbose)
174+
appendPQExpBuffer(&sql, " VERBOSE");
168175
if (table)
169176
appendPQExpBuffer(&sql, " %s", fmtId(table));
170177
appendPQExpBuffer(&sql, ";\n");
@@ -187,7 +194,7 @@ cluster_one_database(const char *dbname, const char *table,
187194

188195

189196
static void
190-
cluster_all_databases(const char *host, const char *port,
197+
cluster_all_databases(bool verbose, const char *host, const char *port,
191198
const char *username, bool password,
192199
const char *progname, bool echo, bool quiet)
193200
{
@@ -209,7 +216,7 @@ cluster_all_databases(const char *host, const char *port,
209216
fflush(stdout);
210217
}
211218

212-
cluster_one_database(dbname, NULL,
219+
cluster_one_database(dbname, verbose, NULL,
213220
host, port, username, password,
214221
progname, echo);
215222
}
@@ -230,6 +237,7 @@ help(const char *progname)
230237
printf(_(" -t, --table=TABLE cluster specific table only\n"));
231238
printf(_(" -e, --echo show the commands being sent to the server\n"));
232239
printf(_(" -q, --quiet don't write any messages\n"));
240+
printf(_(" -v, --verbose write a lot of output\n"));
233241
printf(_(" --help show this help, then exit\n"));
234242
printf(_(" --version output version information, then exit\n"));
235243
printf(_("\nConnection options:\n"));

src/include/nodes/parsenodes.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
1414
* Portions Copyright (c) 1994, Regents of the University of California
1515
*
16-
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.378 2008/11/15 19:43:46 tgl Exp $
16+
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.379 2008/11/24 08:46:04 petere Exp $
1717
*
1818
*-------------------------------------------------------------------------
1919
*/
@@ -1949,6 +1949,7 @@ typedef struct ClusterStmt
19491949
NodeTag type;
19501950
RangeVar *relation; /* relation being indexed, or NULL if all */
19511951
char *indexname; /* original index defined */
1952+
bool verbose; /* print progress info */
19521953
} ClusterStmt;
19531954

19541955
/* ----------------------

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy