*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.162 2007/05/19 01:02:34 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.163 2007/09/10 21:59:37 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
RelationGetRelationName(rel));
+ /*
+ * Reject clustering a remote temp table ... their local buffer manager
+ * is not going to cope.
+ */
+ if (isOtherTempNamespace(RelationGetNamespace(rel)))
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("cannot cluster temporary tables of other sessions")));
+
if (stmt->indexname == NULL)
{
ListCell *index;
return;
}
+ /*
+ * Silently skip a temp table for a remote session. Only doing this
+ * check in the "recheck" case is appropriate (which currently means
+ * somebody is executing a database-wide CLUSTER), because there is
+ * another check in cluster() which will stop any attempt to cluster
+ * remote temp tables by name. There is another check in
+ * check_index_is_clusterable which is redundant, but we leave it for
+ * extra safety.
+ */
+ if (isOtherTempNamespace(RelationGetNamespace(OldHeap)))
+ {
+ relation_close(OldHeap, AccessExclusiveLock);
+ return;
+ }
+
/*
* Check that the index still exists
*/
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.164 2007/09/07 00:58:56 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/indexcmds.c,v 1.165 2007/09/10 21:59:37 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
if (classtuple->relkind != RELKIND_RELATION)
continue;
+ /* Skip temp tables of other backends; we can't reindex them at all */
+ if (isOtherTempNamespace(classtuple->relnamespace))
+ continue;
+
/* Check user/system classification, and optionally skip */
if (IsSystemClass(classtuple))
{