CLUSTER VERBOSE and corresponding clusterdb --verbose option
authorPeter Eisentraut
Mon, 24 Nov 2008 08:46:04 +0000 (08:46 +0000)
committerPeter Eisentraut
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 @@
 
 
@@ -21,8 +21,8 @@ PostgreSQL documentation
 
  
 
-CLUSTER tablename [ USING indexname ]
-CLUSTER
+CLUSTER [VERBOSE] tablename [ USING indexname ]
+CLUSTER [VERBOSE]
 
  
 
@@ -95,6 +95,15 @@ CLUSTER
      
     
    
+
+   
+    VERBOSE
+    
+     
+      Prints a progress report as each table is clustered.
+     
+    
+   
   
  
 
index 2990b2c8af2aaf32a7cd99f1ad988f47f6298795..45bfbe2f6451a5214b22e0b5bef7e954e4298576 100644 (file)
@@ -1,5 +1,5 @@
 
 
@@ -23,12 +23,14 @@ PostgreSQL documentation
   
    clusterdb
    connection-option
+   --verbose-v
    --table | -t table 
    dbname
    
    clusterdb
    connection-option
    --all-a
+   --verbose-v
   
  
  
@@ -117,6 +119,16 @@ PostgreSQL documentation
       
      
 
+     
+      
+      
+      
+       
+        Print detailed information during processing.
+       
+      
+     
+
     
    
 
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  [ USING  ]
- *             CLUSTER
- *             CLUSTER  ON  (for pre-8.3)
+ *             CLUSTER [VERBOSE]  [ USING  ]
+ *             CLUSTER [VERBOSE]
+ *             CLUSTER [VERBOSE]  ON  (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;
 
 /* ----------------------