1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-19 23:22:23 +03:00

Fix the database-wide version of CLUSTER to silently skip temp tables of

remote sessions, instead of erroring out in the middle of the operation.

This is a backpatch of a previous fix applied to CLUSTER to HEAD and 8.2, all
the way back that it is relevant to.
This commit is contained in:
Alvaro Herrera
2007-09-12 15:16:23 +00:00
parent d48f8ab8e1
commit bf476b94b1

View File

@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.131.4.1 2005/02/06 20:19:24 tgl Exp $ * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.131.4.2 2007/09/12 15:16:23 alvherre Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@@ -291,6 +291,18 @@ cluster_rel(RelToCluster *rvtc, bool recheck)
*/ */
OldHeap = heap_open(rvtc->tableOid, AccessExclusiveLock); OldHeap = heap_open(rvtc->tableOid, AccessExclusiveLock);
/*
* Don't allow cluster on temp tables of other backends ... their
* local buffer manager is not going to cope. In the recheck case,
* silently skip it. Otherwise continue -- there is a hard error
* in check_index_is_clusterable.
*/
if (recheck && isOtherTempNamespace(RelationGetNamespace(OldHeap)))
{
heap_close(OldHeap, AccessExclusiveLock);
return;
}
/* Check index is valid to cluster on */ /* Check index is valid to cluster on */
check_index_is_clusterable(OldHeap, rvtc->indexOid); check_index_is_clusterable(OldHeap, rvtc->indexOid);