*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.61 2001/01/01 21:35:00 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.62 2001/01/10 01:12:28 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#include "miscadmin.h"
#include "utils/builtins.h"
#include "utils/syscache.h"
+#include "utils/temprel.h"
-static Oid copy_heap(Oid OIDOldHeap, char *NewName);
+
+static Oid copy_heap(Oid OIDOldHeap, char *NewName, bool istemp);
static void copy_index(Oid OIDOldIndex, Oid OIDNewHeap, char *NewIndexName);
static void rebuildheap(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex);
Relation OldHeap,
OldIndex;
HeapTuple tuple;
+ bool istemp;
char NewHeapName[NAMEDATALEN];
char NewIndexName[NAMEDATALEN];
char saveoldrelname[NAMEDATALEN];
LockRelation(OldIndex, AccessExclusiveLock);
OIDOldIndex = RelationGetRelid(OldIndex);
+ istemp = is_temp_rel_name(saveoldrelname);
+
/*
* Check that index is in fact an index on the given relation
*/
*/
snprintf(NewHeapName, NAMEDATALEN, "temp_%u", OIDOldHeap);
- OIDNewHeap = copy_heap(OIDOldHeap, NewHeapName);
+ OIDNewHeap = copy_heap(OIDOldHeap, NewHeapName, istemp);
/* We do not need CommandCounterIncrement() because copy_heap did it. */
}
static Oid
-copy_heap(Oid OIDOldHeap, char *NewName)
+copy_heap(Oid OIDOldHeap, char *NewName, bool istemp)
{
TupleDesc OldHeapDesc,
tupdesc;
tupdesc = CreateTupleDescCopy(OldHeapDesc);
OIDNewHeap = heap_create_with_catalog(NewName, tupdesc,
- RELKIND_RELATION, false,
+ RELKIND_RELATION, istemp,
allowSystemTableMods);
/*
OldIndex = index_open(OIDOldIndex);
/*
- * Create a new (temporary) index like the one that's already here.
- * To do this I get the info from pg_index, and add a new index with
- * a temporary name.
+ * Create a new index like the old one. To do this I get the info
+ * from pg_index, and add a new index with a temporary name (that
+ * will be changed later).
+ *
+ * NOTE: index_create will cause the new index to be a temp relation
+ * if its parent table is, so we don't need to do anything special
+ * for the temp-table case here.
*/
Old_pg_index_Tuple = SearchSysCache(INDEXRELID,
ObjectIdGetDatum(OIDOldIndex),