|
|
|
@ -11,7 +11,7 @@ |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* IDENTIFICATION |
|
|
|
|
* $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.103 2002/12/30 18:42:13 tgl Exp $ |
|
|
|
|
* $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.104 2002/12/30 19:45:15 tgl Exp $ |
|
|
|
|
* |
|
|
|
|
*------------------------------------------------------------------------- |
|
|
|
|
*/ |
|
|
|
@ -26,7 +26,6 @@ |
|
|
|
|
#include "catalog/index.h" |
|
|
|
|
#include "catalog/indexing.h" |
|
|
|
|
#include "catalog/namespace.h" |
|
|
|
|
#include "catalog/pg_constraint.h" |
|
|
|
|
#include "commands/cluster.h" |
|
|
|
|
#include "commands/tablecmds.h" |
|
|
|
|
#include "miscadmin.h" |
|
|
|
@ -111,9 +110,9 @@ cluster(ClusterStmt *stmt) |
|
|
|
|
RelToCluster rvtc; |
|
|
|
|
|
|
|
|
|
/* Find and lock the table */ |
|
|
|
|
tableOid = RangeVarGetRelid(stmt->relation, false); |
|
|
|
|
rel = heap_openrv(stmt->relation, AccessExclusiveLock); |
|
|
|
|
|
|
|
|
|
rel = heap_open(tableOid, AccessExclusiveLock); |
|
|
|
|
tableOid = RelationGetRelid(rel); |
|
|
|
|
|
|
|
|
|
/* Check permissions */ |
|
|
|
|
if (!check_cluster_permitted(tableOid)) |
|
|
|
@ -325,6 +324,13 @@ cluster_rel(RelToCluster *rvtc, bool recheck) |
|
|
|
|
elog(ERROR, "CLUSTER: cannot cluster system relation \"%s\"", |
|
|
|
|
RelationGetRelationName(OldHeap)); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Don't allow cluster on temp tables of other backends ... their |
|
|
|
|
* local buffer manager is not going to cope. |
|
|
|
|
*/ |
|
|
|
|
if (isOtherTempNamespace(RelationGetNamespace(OldHeap))) |
|
|
|
|
elog(ERROR, "CLUSTER cannot be used on temp tables of other processes"); |
|
|
|
|
|
|
|
|
|
/* Drop relcache refcnt on OldIndex, but keep lock */ |
|
|
|
|
index_close(OldIndex); |
|
|
|
|
|
|
|
|
|