]> granicus.if.org Git - postgresql/commitdiff
CLUSTER VERBOSE and corresponding clusterdb --verbose option
authorPeter Eisentraut <peter_e@gmx.net>
Mon, 24 Nov 2008 08:46:04 +0000 (08:46 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Mon, 24 Nov 2008 08:46:04 +0000 (08:46 +0000)
Jim Cox and Peter Eisentraut

doc/src/sgml/ref/cluster.sgml
doc/src/sgml/ref/clusterdb.sgml
src/backend/commands/cluster.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/parser/gram.y
src/bin/scripts/clusterdb.c
src/include/nodes/parsenodes.h

index f6a00ca25ae4423a3b1349465bea84c44005979e..ce3087b0df11482c5842caef965ee6948725a98c 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/cluster.sgml,v 1.45 2008/11/14 10:22:45 petere Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/cluster.sgml,v 1.46 2008/11/24 08:46:03 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -21,8 +21,8 @@ PostgreSQL documentation
 
  <refsynopsisdiv>
 <synopsis>
-CLUSTER <replaceable class="PARAMETER">tablename</replaceable> [ USING <replaceable class="PARAMETER">indexname</replaceable> ]
-CLUSTER
+CLUSTER [VERBOSE] <replaceable class="PARAMETER">tablename</replaceable> [ USING <replaceable class="PARAMETER">indexname</replaceable> ]
+CLUSTER [VERBOSE]
 </synopsis>
  </refsynopsisdiv>
 
@@ -95,6 +95,15 @@ CLUSTER
      </para>
     </listitem>
    </varlistentry>
+
+   <varlistentry>
+    <term><literal>VERBOSE</literal></term>
+    <listitem>
+     <para>
+      Prints a progress report as each table is clustered.
+     </para>
+    </listitem>
+   </varlistentry>
   </variablelist>
  </refsect1>
 
index 2990b2c8af2aaf32a7cd99f1ad988f47f6298795..45bfbe2f6451a5214b22e0b5bef7e954e4298576 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/clusterdb.sgml,v 1.23 2007/12/11 19:57:32 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/clusterdb.sgml,v 1.24 2008/11/24 08:46:03 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -23,12 +23,14 @@ PostgreSQL documentation
   <cmdsynopsis>
    <command>clusterdb</command>
    <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
+   <group><arg>--verbose</arg><arg>-v</arg></group>
    <arg>--table | -t <replaceable>table</replaceable> </arg>
    <arg><replaceable>dbname</replaceable></arg>
    <sbr>
    <command>clusterdb</command>
    <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
    <group><arg>--all</arg><arg>-a</arg></group>
+   <group><arg>--verbose</arg><arg>-v</arg></group>
   </cmdsynopsis>
  </refsynopsisdiv>
  
@@ -117,6 +119,16 @@ PostgreSQL documentation
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>-v</></term>
+      <term><option>--verbose</></term>
+      <listitem>
+       <para>
+        Print detailed information during processing.
+       </para>
+      </listitem>
+     </varlistentry>
+
     </variablelist>
    </para>
 
index 36db0f67315850536cb6b312df5f0fb55410170a..5dd473def10ae6b3162802f23221c57281dfd75d 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.178 2008/10/14 17:19:50 alvherre Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.179 2008/11/24 08:46:03 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -61,7 +61,7 @@ typedef struct
 } RelToCluster;
 
 
-static void cluster_rel(RelToCluster *rv, bool recheck);
+static void cluster_rel(RelToCluster *rv, bool recheck, bool verbose);
 static void rebuild_relation(Relation OldHeap, Oid indexOid);
 static TransactionId copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex);
 static List *get_tables_to_cluster(MemoryContext cluster_context);
@@ -177,7 +177,7 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
                heap_close(rel, NoLock);
 
                /* Do the job */
-               cluster_rel(&rvtc, false);
+               cluster_rel(&rvtc, false, stmt->verbose);
        }
        else
        {
@@ -226,7 +226,7 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
                        StartTransactionCommand();
                        /* functions in indexes may want a snapshot set */
                        PushActiveSnapshot(GetTransactionSnapshot());
-                       cluster_rel(rvtc, true);
+                       cluster_rel(rvtc, true, stmt->verbose);
                        PopActiveSnapshot();
                        CommitTransactionCommand();
                }
@@ -254,7 +254,7 @@ cluster(ClusterStmt *stmt, bool isTopLevel)
  * them incrementally while we load the table.
  */
 static void
-cluster_rel(RelToCluster *rvtc, bool recheck)
+cluster_rel(RelToCluster *rvtc, bool recheck, bool verbose)
 {
        Relation        OldHeap;
 
@@ -344,6 +344,10 @@ cluster_rel(RelToCluster *rvtc, bool recheck)
        check_index_is_clusterable(OldHeap, rvtc->indexOid, recheck);
 
        /* rebuild_relation does all the dirty work */
+       ereport(verbose ? INFO : DEBUG2,
+                       (errmsg("clustering \"%s.%s\"",
+                                       get_namespace_name(RelationGetNamespace(OldHeap)),
+                                       RelationGetRelationName(OldHeap))));
        rebuild_relation(OldHeap, rvtc->indexOid);
 
        /* NB: rebuild_relation does heap_close() on OldHeap */
index ec3c591b43521d2efde9d80ff1e705e69367b3e5..3904c484bc9405c7b86f8f33d813112f3bf21402 100644 (file)
@@ -15,7 +15,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.412 2008/11/15 19:43:46 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.413 2008/11/24 08:46:03 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2293,6 +2293,7 @@ _copyClusterStmt(ClusterStmt *from)
 
        COPY_NODE_FIELD(relation);
        COPY_STRING_FIELD(indexname);
+       COPY_SCALAR_FIELD(verbose) ;
 
        return newnode;
 }
index a23ef4b03ea55bddc9fc7915d2598b8811e8192e..dd63cea571d57194904879311c329befb5310bc5 100644 (file)
@@ -22,7 +22,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.337 2008/11/15 19:43:46 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.338 2008/11/24 08:46:03 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1032,6 +1032,7 @@ _equalClusterStmt(ClusterStmt *a, ClusterStmt *b)
 {
        COMPARE_NODE_FIELD(relation);
        COMPARE_STRING_FIELD(indexname);
+       COMPARE_SCALAR_FIELD(verbose);
 
        return true;
 }
index eaf72f702628316dcc745f0455f11a7e1d2c08e2..7567d90c3fd96bf5eb45fd71f6bfa7ee10ca7a6d 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.639 2008/11/21 11:47:55 petere Exp $
+ *       $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.640 2008/11/24 08:46:03 petere Exp $
  *
  * HISTORY
  *       AUTHOR                        DATE                    MAJOR EVENT
@@ -5781,33 +5781,36 @@ CreateConversionStmt:
 /*****************************************************************************
  *
  *             QUERY:
- *                             CLUSTER <qualified_name> [ USING <index_name> ]
- *                             CLUSTER
- *                             CLUSTER <index_name> ON <qualified_name> (for pre-8.3)
+ *                             CLUSTER [VERBOSE] <qualified_name> [ USING <index_name> ]
+ *                             CLUSTER [VERBOSE]
+ *                             CLUSTER [VERBOSE] <index_name> ON <qualified_name> (for pre-8.3)
  *
  *****************************************************************************/
 
 ClusterStmt:
-                       CLUSTER qualified_name cluster_index_specification
+                       CLUSTER opt_verbose qualified_name cluster_index_specification
                                {
                               ClusterStmt *n = makeNode(ClusterStmt);
-                                  n->relation = $2;
-                                  n->indexname = $3;
+                                  n->relation = $3;
+                                  n->indexname = $4;
+                                  n->verbose = $2;
                                   $$ = (Node*)n;
                                }
-                       | CLUSTER
+                       | CLUSTER opt_verbose
                            {
                                   ClusterStmt *n = makeNode(ClusterStmt);
                                   n->relation = NULL;
                                   n->indexname = NULL;
+                                  n->verbose = $2;
                                   $$ = (Node*)n;
                                }
                        /* kept for pre-8.3 compatibility */
-                       | CLUSTER index_name ON qualified_name
+                       | CLUSTER opt_verbose index_name ON qualified_name
                                {
                                   ClusterStmt *n = makeNode(ClusterStmt);
-                                  n->relation = $4;
-                                  n->indexname = $2;
+                                  n->relation = $5;
+                                  n->indexname = $3;
+                                  n->verbose = $2;
                                   $$ = (Node*)n;
                                }
                ;
index 5ad95167ccecea7705a566b543ae4d7876743ed5..c815cf2a4f92ff9ff6574b8c8da034cc657a52fa 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Portions Copyright (c) 2002-2008, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/scripts/clusterdb.c,v 1.20 2008/01/01 19:45:56 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/scripts/clusterdb.c,v 1.21 2008/11/24 08:46:04 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "dumputils.h"
 
 
-static void cluster_one_database(const char *dbname, const char *table,
+static void cluster_one_database(const char *dbname, bool verbose, const char *table,
                                         const char *host, const char *port,
                                         const char *username, bool password,
                                         const char *progname, bool echo);
-static void cluster_all_databases(const char *host, const char *port,
+static void cluster_all_databases(bool verbose, const char *host, const char *port,
                                          const char *username, bool password,
                                          const char *progname, bool echo, bool quiet);
 
@@ -38,6 +38,7 @@ main(int argc, char *argv[])
                {"dbname", required_argument, NULL, 'd'},
                {"all", no_argument, NULL, 'a'},
                {"table", required_argument, NULL, 't'},
+               {"verbose", no_argument, NULL, 'v'},
                {NULL, 0, NULL, 0}
        };
 
@@ -54,13 +55,14 @@ main(int argc, char *argv[])
        bool            quiet = false;
        bool            alldb = false;
        char       *table = NULL;
+       bool            verbose = false;
 
        progname = get_progname(argv[0]);
        set_pglocale_pgservice(argv[0], "pgscripts");
 
        handle_help_version_opts(argc, argv, "clusterdb", help);
 
-       while ((c = getopt_long(argc, argv, "h:p:U:Weqd:at:", long_options, &optindex)) != -1)
+       while ((c = getopt_long(argc, argv, "h:p:U:Weqd:at:v", long_options, &optindex)) != -1)
        {
                switch (c)
                {
@@ -91,6 +93,9 @@ main(int argc, char *argv[])
                        case 't':
                                table = optarg;
                                break;
+                       case 'v':
+                               verbose = true;
+                               break;
                        default:
                                fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
                                exit(1);
@@ -128,7 +133,7 @@ main(int argc, char *argv[])
                        exit(1);
                }
 
-               cluster_all_databases(host, port, username, password,
+               cluster_all_databases(verbose, host, port, username, password,
                                                          progname, echo, quiet);
        }
        else
@@ -143,7 +148,7 @@ main(int argc, char *argv[])
                                dbname = get_user_name(progname);
                }
 
-               cluster_one_database(dbname, table,
+               cluster_one_database(dbname, verbose, table,
                                                         host, port, username, password,
                                                         progname, echo);
        }
@@ -153,7 +158,7 @@ main(int argc, char *argv[])
 
 
 static void
-cluster_one_database(const char *dbname, const char *table,
+cluster_one_database(const char *dbname, bool verbose, const char *table,
                                         const char *host, const char *port,
                                         const char *username, bool password,
                                         const char *progname, bool echo)
@@ -165,6 +170,8 @@ cluster_one_database(const char *dbname, const char *table,
        initPQExpBuffer(&sql);
 
        appendPQExpBuffer(&sql, "CLUSTER");
+       if (verbose)
+               appendPQExpBuffer(&sql, " VERBOSE");
        if (table)
                appendPQExpBuffer(&sql, " %s", fmtId(table));
        appendPQExpBuffer(&sql, ";\n");
@@ -187,7 +194,7 @@ cluster_one_database(const char *dbname, const char *table,
 
 
 static void
-cluster_all_databases(const char *host, const char *port,
+cluster_all_databases(bool verbose, const char *host, const char *port,
                                          const char *username, bool password,
                                          const char *progname, bool echo, bool quiet)
 {
@@ -209,7 +216,7 @@ cluster_all_databases(const char *host, const char *port,
                        fflush(stdout);
                }
 
-               cluster_one_database(dbname, NULL,
+               cluster_one_database(dbname, verbose, NULL,
                                                         host, port, username, password,
                                                         progname, echo);
        }
@@ -230,6 +237,7 @@ help(const char *progname)
        printf(_("  -t, --table=TABLE         cluster specific table only\n"));
        printf(_("  -e, --echo                show the commands being sent to the server\n"));
        printf(_("  -q, --quiet               don't write any messages\n"));
+       printf(_("  -v, --verbose             write a lot of output\n"));
        printf(_("  --help                    show this help, then exit\n"));
        printf(_("  --version                 output version information, then exit\n"));
        printf(_("\nConnection options:\n"));
index 1edd094dbf6dc3abe2dcee16341edabfd763c9e1..11bec8ad005b6325a133c603182d861f817e4d80 100644 (file)
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.378 2008/11/15 19:43:46 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.379 2008/11/24 08:46:04 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1949,6 +1949,7 @@ typedef struct ClusterStmt
        NodeTag         type;
        RangeVar   *relation;           /* relation being indexed, or NULL if all */
        char       *indexname;          /* original index defined */
+       bool            verbose;                /* print progress info */
 } ClusterStmt;
 
 /* ----------------------