diff options
Diffstat (limited to 'src/backend/commands/cluster.c')
-rw-r--r-- | src/backend/commands/cluster.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index e805e28a39e..997c1bde6b5 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -25,6 +25,7 @@ #include "catalog/dependency.h" #include "catalog/heap.h" #include "catalog/index.h" +#include "catalog/namespace.h" #include "catalog/toasting.h" #include "commands/cluster.h" #include "commands/tablecmds.h" @@ -106,15 +107,12 @@ cluster(ClusterStmt *stmt, bool isTopLevel) indexOid = InvalidOid; Relation rel; - /* Find and lock the table */ - rel = heap_openrv(stmt->relation, AccessExclusiveLock); - - tableOid = RelationGetRelid(rel); - - /* Check permissions */ - if (!pg_class_ownercheck(tableOid, GetUserId())) - aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS, - RelationGetRelationName(rel)); + /* Find, lock, and check permissions on the table */ + tableOid = RangeVarGetRelidExtended(stmt->relation, + AccessExclusiveLock, + false, false, + RangeVarCallbackOwnsTable, NULL); + rel = heap_open(tableOid, NoLock); /* * Reject clustering a remote temp table ... their local buffer |