Index: src/backend/commands/cluster.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/cluster.c,v
retrieving revision 1.177
diff -c -r1.177 cluster.c
*** src/backend/commands/cluster.c	19 Jun 2008 00:46:04 -0000	1.177
--- src/backend/commands/cluster.c	10 Oct 2008 12:47:04 -0000
***************
*** 60,66 ****
  } RelToCluster;
  
  
! static void cluster_rel(RelToCluster *rv, bool recheck);
  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);
--- 60,66 ----
  } RelToCluster;
  
  
! static void cluster_rel(RelToCluster *rv, bool recheck, int elevel);
  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);
***************
*** 176,182 ****
  		heap_close(rel, NoLock);
  
  		/* Do the job */
! 		cluster_rel(&rvtc, false);
  	}
  	else
  	{
--- 176,182 ----
  		heap_close(rel, NoLock);
  
  		/* Do the job */
! 		cluster_rel(&rvtc, false, stmt->verbose ? INFO : DEBUG2);
  	}
  	else
  	{
***************
*** 225,231 ****
  			StartTransactionCommand();
  			/* functions in indexes may want a snapshot set */
  			PushActiveSnapshot(GetTransactionSnapshot());
! 			cluster_rel(rvtc, true);
  			PopActiveSnapshot();
  			CommitTransactionCommand();
  		}
--- 225,231 ----
  			StartTransactionCommand();
  			/* functions in indexes may want a snapshot set */
  			PushActiveSnapshot(GetTransactionSnapshot());
! 			cluster_rel(rvtc, true, stmt->verbose ? INFO : DEBUG2);
  			PopActiveSnapshot();
  			CommitTransactionCommand();
  		}
***************
*** 253,259 ****
   * them incrementally while we load the table.
   */
  static void
! cluster_rel(RelToCluster *rvtc, bool recheck)
  {
  	Relation	OldHeap;
  
--- 253,259 ----
   * them incrementally while we load the table.
   */
  static void
! cluster_rel(RelToCluster *rvtc, bool recheck, int elevel)
  {
  	Relation	OldHeap;
  
***************
*** 343,348 ****
--- 343,352 ----
  	check_index_is_clusterable(OldHeap, rvtc->indexOid, recheck);
  
  	/* rebuild_relation does all the dirty work */
+ 	ereport(elevel,
+ 			(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: src/backend/nodes/copyfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v
retrieving revision 1.408
diff -c -r1.408 copyfuncs.c
*** src/backend/nodes/copyfuncs.c	7 Oct 2008 19:27:04 -0000	1.408
--- src/backend/nodes/copyfuncs.c	10 Oct 2008 12:47:04 -0000
***************
*** 2259,2264 ****
--- 2259,2265 ----
  
  	COPY_NODE_FIELD(relation);
  	COPY_STRING_FIELD(indexname);
+         COPY_SCALAR_FIELD(verbose) ;
  
  	return newnode;
  }
Index: src/backend/nodes/equalfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v
retrieving revision 1.333
diff -c -r1.333 equalfuncs.c
*** src/backend/nodes/equalfuncs.c	6 Oct 2008 17:39:26 -0000	1.333
--- src/backend/nodes/equalfuncs.c	10 Oct 2008 12:47:04 -0000
***************
*** 1000,1005 ****
--- 1000,1006 ----
  {
  	COMPARE_NODE_FIELD(relation);
  	COMPARE_STRING_FIELD(indexname);
+ 	COMPARE_SCALAR_FIELD(verbose);
  
  	return true;
  }
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.625
diff -c -r2.625 gram.y
*** src/backend/parser/gram.y	4 Oct 2008 21:56:54 -0000	2.625
--- src/backend/parser/gram.y	10 Oct 2008 12:47:05 -0000
***************
*** 5738,5770 ****
  /*****************************************************************************
   *
   *		QUERY:
!  *				CLUSTER <qualified_name> [ USING <index_name> ]
!  *				CLUSTER
!  *				CLUSTER <index_name> ON <qualified_name> (for pre-8.3)
   *
   *****************************************************************************/
  
  ClusterStmt:
! 			CLUSTER qualified_name cluster_index_specification
  				{
  			       ClusterStmt *n = makeNode(ClusterStmt);
  				   n->relation = $2;
  				   n->indexname = $3;
  				   $$ = (Node*)n;
  				}
! 			| CLUSTER
  			    {
  				   ClusterStmt *n = makeNode(ClusterStmt);
  				   n->relation = NULL;
  				   n->indexname = NULL;
  				   $$ = (Node*)n;
  				}
  			/* kept for pre-8.3 compatibility */
! 			| CLUSTER index_name ON qualified_name
  				{
  				   ClusterStmt *n = makeNode(ClusterStmt);
  				   n->relation = $4;
  				   n->indexname = $2;
  				   $$ = (Node*)n;
  				}
  		;
--- 5738,5773 ----
  /*****************************************************************************
   *
   *		QUERY:
!  *				CLUSTER <qualified_name> [ USING <index_name> ] [VERBOSE]
!  *				CLUSTER [VERBOSE]
!  *				CLUSTER <index_name> ON <qualified_name> [VERBOSE] (for pre-8.3)
   *
   *****************************************************************************/
  
  ClusterStmt:
! 			CLUSTER qualified_name cluster_index_specification opt_verbose
  				{
  			       ClusterStmt *n = makeNode(ClusterStmt);
  				   n->relation = $2;
  				   n->indexname = $3;
+ 				   n->verbose = $4;
  				   $$ = (Node*)n;
  				}
! 			| 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 opt_verbose
  				{
  				   ClusterStmt *n = makeNode(ClusterStmt);
  				   n->relation = $4;
  				   n->indexname = $2;
+ 				   n->verbose = $5;
  				   $$ = (Node*)n;
  				}
  		;
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/nodes/parsenodes.h,v
retrieving revision 1.376
diff -c -r1.376 parsenodes.h
*** src/include/nodes/parsenodes.h	4 Oct 2008 21:56:55 -0000	1.376
--- src/include/nodes/parsenodes.h	10 Oct 2008 12:47:06 -0000
***************
*** 1940,1945 ****
--- 1940,1946 ----
  	NodeTag		type;
  	RangeVar   *relation;		/* relation being indexed, or NULL if all */
  	char	   *indexname;		/* original index defined */
+ 	bool		verbose;		/* print progress info */
  } ClusterStmt;
  
  /* ----------------------
