]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix the database-wide version of CLUSTER to silently skip temp tables of
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 12 Sep 2007 15:16:23 +0000 (15:16 +0000)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 12 Sep 2007 15:16:23 +0000 (15:16 +0000)
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.

src/backend/commands/cluster.c

index 7e1c2e3b08dd32606cb14aafc875bfe43e8b506d..5cc6aca59d3f3b3456ad5f57dce2e96f20ccc3f8 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * 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);
 
+       /*
+        * 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_clusterable(OldHeap, rvtc->indexOid);