Index: src/backend/commands/cluster.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/commands/cluster.c,v
retrieving revision 1.177
diff -c -p -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 19:46:56 -0000
***************
*** 29,34 ****
--- 29,35 ----
  #include "catalog/index.h"
  #include "catalog/indexing.h"
  #include "catalog/namespace.h"
+ #include "catalog/pg_namespace.h"
  #include "catalog/toasting.h"
  #include "commands/cluster.h"
  #include "commands/tablecmds.h"
*************** rebuild_relation(Relation OldHeap, Oid i
*** 568,573 ****
--- 569,575 ----
  	char		NewHeapName[NAMEDATALEN];
  	TransactionId frozenXid;
  	ObjectAddress object;
+ 	Relation	newrel;
  
  	/* Mark the correct index as clustered */
  	mark_index_clustered(OldHeap, indexOid);
*************** rebuild_relation(Relation OldHeap, Oid i
*** 622,627 ****
--- 624,658 ----
  	 * because reindex_relation does it.
  	 */
  	reindex_relation(tableOid, false);
+ 
+ 	/*
+ 	 * At this point, everything is kosher except that the toast table's name
+ 	 * corresponds to the temporary table.  The name is irrelevant to
+ 	 * the backend because it's referenced by OID, but users looking at the
+ 	 * catalogs could be confused.  Rename it to prevent this problem.
+ 	 *
+ 	 * Note no lock required on the relation, because we already hold an
+ 	 * exclusive lock on it.
+ 	 */
+ 	newrel = heap_open(tableOid, NoLock);
+ 	if (OidIsValid(newrel->rd_rel->reltoastrelid))
+ 	{
+ 		char		NewToastName[NAMEDATALEN];
+ 		Relation	toastrel;
+ 
+ 		/* rename the toast table ... */
+ 		snprintf(NewToastName, NAMEDATALEN, "pg_toast_%u", tableOid);
+ 		RenameRelationInternal(newrel->rd_rel->reltoastrelid, NewToastName,
+ 							   PG_TOAST_NAMESPACE);
+ 
+ 		/* ... and its index too */
+ 		toastrel = relation_open(newrel->rd_rel->reltoastrelid, AccessShareLock);
+ 		snprintf(NewToastName, NAMEDATALEN, "pg_toast_%u_index", tableOid);
+ 		RenameRelationInternal(toastrel->rd_rel->reltoastidxid, NewToastName,
+ 							   PG_TOAST_NAMESPACE);
+ 		relation_close(toastrel, AccessShareLock);
+ 	}
+ 	relation_close(newrel, NoLock);
  }
  
  /*
