index dc967390ba64f984b789fc697d22bf1d782b8d62..2d2ac3e89400420a16a55b7ec1fed028f74335de 100644 (file)
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.195 2010年01月28日 23:21:11 petere Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.196 2010年02月02日 19:12:29 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -657,20 +657,25 @@ rebuild_relation(Relation OldHeap, Oid indexOid,
newrel = heap_open(tableOid, NoLock);
if (OidIsValid(newrel->rd_rel->reltoastrelid))
{
- char NewToastName[NAMEDATALEN];
Relation toastrel;
+ Oid toastidx;
+ Oid toastnamespace;
+ char NewToastName[NAMEDATALEN];
+
+ toastrel = relation_open(newrel->rd_rel->reltoastrelid, AccessShareLock);
+ toastidx = toastrel->rd_rel->reltoastidxid;
+ toastnamespace = toastrel->rd_rel->relnamespace;
+ relation_close(toastrel, AccessShareLock);
/* rename the toast table ... */
snprintf(NewToastName, NAMEDATALEN, "pg_toast_%u", tableOid);
RenameRelationInternal(newrel->rd_rel->reltoastrelid, NewToastName,
- PG_TOAST_NAMESPACE);
+ toastnamespace);
/* ... 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);
+ RenameRelationInternal(toastidx, NewToastName,
+ toastnamespace);
}
relation_close(newrel, NoLock);
}
index 9bf4764b689f8c2b3d4da03e09d02bb4f8327a53..23d0a3cd509ccc5ba0f54740cdb0732076d13a66 100644 (file)
100
(5 rows)
+-- check that temp tables can be clustered
+create temp table clstr_temp (col1 int primary key, col2 text);
+NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "clstr_temp_pkey" for table "clstr_temp"
+insert into clstr_temp values (2, 'two'), (1, 'one');
+cluster clstr_temp using clstr_temp_pkey;
+select * from clstr_temp;
+ col1 | col2
+------+------
+ 1 | one
+ 2 | two
+(2 rows)
+
-- clean up
\c -
DROP TABLE clustertest;
index a54d6e07f50cde7c562e0f4ea1ca76b5818aaf1f..f3f7a248100975bbcc14f91d515e4c3dc89a1810 100644 (file)
SELECT * FROM clustertest;
+-- check that temp tables can be clustered
+create temp table clstr_temp (col1 int primary key, col2 text);
+insert into clstr_temp values (2, 'two'), (1, 'one');
+cluster clstr_temp using clstr_temp_pkey;
+select * from clstr_temp;
+
-- clean up
\c -
DROP TABLE clustertest;