diff --git a/src/backend/distributed/commands/utility_hook.c b/src/backend/distributed/commands/utility_hook.c index 9eb873eb9..20519b9d6 100644 --- a/src/backend/distributed/commands/utility_hook.c +++ b/src/backend/distributed/commands/utility_hook.c @@ -472,9 +472,9 @@ ProcessUtilityInternal(PlannedStmt *pstmt, { LockStmt *stmt = (LockStmt *) parsetree; - ereport(NOTICE, errmsg("Processing LOCK command.")); + bool isTopLevel = context == PROCESS_UTILITY_TOPLEVEL; + ErrorIfUnsupportedLockStmt(stmt, isTopLevel); - ErrorIfUnsupportedLockStmt(stmt); uint32 nowaitFlag = stmt->nowait ? DIST_LOCK_NOWAIT : 0; AcquireDistributedLockOnRelations(stmt->relations, stmt->mode, DIST_LOCK_VIEWS_RECUR | nowaitFlag); diff --git a/src/backend/distributed/utils/resource_lock.c b/src/backend/distributed/utils/resource_lock.c index a3a118993..f973d7826 100644 --- a/src/backend/distributed/utils/resource_lock.c +++ b/src/backend/distributed/utils/resource_lock.c @@ -1253,9 +1253,9 @@ AcquireDistributedLockOnRelations(List *relationList, LOCKMODE lockMode, uint32 * - Locking shard, but citus.enable_manual_changes_to_shards is false */ void -ErrorIfUnsupportedLockStmt(LockStmt *stmt) +ErrorIfUnsupportedLockStmt(LockStmt *stmt, bool isTopLevel) { - RequireTransactionBlock(true, "LOCK TABLE"); + RequireTransactionBlock(isTopLevel, "LOCK TABLE"); RangeVar *rangeVar = NULL; foreach_ptr(rangeVar, stmt->relations) diff --git a/src/include/distributed/resource_lock.h b/src/include/distributed/resource_lock.h index 2deb53318..7a9509564 100644 --- a/src/include/distributed/resource_lock.h +++ b/src/include/distributed/resource_lock.h @@ -163,5 +163,5 @@ extern LOCKMODE LockModeCStringToLockMode(const char *lockModeName); extern const char * LockModeToLockModeCString(LOCKMODE lockMode); extern void AcquireDistributedLockOnRelations(List *relationList, LOCKMODE lockMode, uint32 configs); -extern void ErrorIfUnsupportedLockStmt(LockStmt *stmt); +extern void ErrorIfUnsupportedLockStmt(LockStmt *stmt, bool isTopLevel); #endif /* RESOURCE_LOCK_H */