15
15
*
16
16
*
17
17
* IDENTIFICATION
18
- * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.61 2001/01/01 21:35:00 tgl Exp $
18
+ * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.62 2001/01/10 01:12:28 tgl Exp $
19
19
*
20
20
*-------------------------------------------------------------------------
21
21
*/
34
34
#include "miscadmin.h"
35
35
#include "utils/builtins.h"
36
36
#include "utils/syscache.h"
37
+ #include "utils/temprel.h"
37
38
38
- static Oid copy_heap (Oid OIDOldHeap , char * NewName );
39
+
40
+ static Oid copy_heap (Oid OIDOldHeap , char * NewName , bool istemp );
39
41
static void copy_index (Oid OIDOldIndex , Oid OIDNewHeap , char * NewIndexName );
40
42
static void rebuildheap (Oid OIDNewHeap , Oid OIDOldHeap , Oid OIDOldIndex );
41
43
@@ -60,6 +62,7 @@ cluster(char *oldrelname, char *oldindexname)
60
62
Relation OldHeap ,
61
63
OldIndex ;
62
64
HeapTuple tuple ;
65
+ bool istemp ;
63
66
char NewHeapName [NAMEDATALEN ];
64
67
char NewIndexName [NAMEDATALEN ];
65
68
char saveoldrelname [NAMEDATALEN ];
@@ -82,6 +85,8 @@ cluster(char *oldrelname, char *oldindexname)
82
85
LockRelation (OldIndex , AccessExclusiveLock );
83
86
OIDOldIndex = RelationGetRelid (OldIndex );
84
87
88
+ istemp = is_temp_rel_name (saveoldrelname );
89
+
85
90
/*
86
91
* Check that index is in fact an index on the given relation
87
92
*/
@@ -105,7 +110,7 @@ cluster(char *oldrelname, char *oldindexname)
105
110
*/
106
111
snprintf (NewHeapName , NAMEDATALEN , "temp_%u" , OIDOldHeap );
107
112
108
- OIDNewHeap = copy_heap (OIDOldHeap , NewHeapName );
113
+ OIDNewHeap = copy_heap (OIDOldHeap , NewHeapName , istemp );
109
114
110
115
/* We do not need CommandCounterIncrement() because copy_heap did it. */
111
116
@@ -138,7 +143,7 @@ cluster(char *oldrelname, char *oldindexname)
138
143
}
139
144
140
145
static Oid
141
- copy_heap (Oid OIDOldHeap , char * NewName )
146
+ copy_heap (Oid OIDOldHeap , char * NewName , bool istemp )
142
147
{
143
148
TupleDesc OldHeapDesc ,
144
149
tupdesc ;
@@ -155,7 +160,7 @@ copy_heap(Oid OIDOldHeap, char *NewName)
155
160
tupdesc = CreateTupleDescCopy (OldHeapDesc );
156
161
157
162
OIDNewHeap = heap_create_with_catalog (NewName , tupdesc ,
158
- RELKIND_RELATION , false ,
163
+ RELKIND_RELATION , istemp ,
159
164
allowSystemTableMods );
160
165
161
166
/*
@@ -192,9 +197,13 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap, char *NewIndexName)
192
197
OldIndex = index_open (OIDOldIndex );
193
198
194
199
/*
195
- * Create a new (temporary) index like the one that's already here.
196
- * To do this I get the info from pg_index, and add a new index with
197
- * a temporary name.
200
+ * Create a new index like the old one. To do this I get the info
201
+ * from pg_index, and add a new index with a temporary name (that
202
+ * will be changed later).
203
+ *
204
+ * NOTE: index_create will cause the new index to be a temp relation
205
+ * if its parent table is, so we don't need to do anything special
206
+ * for the temp-table case here.
198
207
*/
199
208
Old_pg_index_Tuple = SearchSysCache (INDEXRELID ,
200
209
ObjectIdGetDatum (OIDOldIndex ),
0 commit comments