diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 492c467698d..fd04d5f3da2 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -614,6 +614,9 @@ ExecCheckPermissions(List *rangeTable, List *rteperminfos, { RTEPermissionInfo *perminfo = lfirst_node(RTEPermissionInfo, l); + if (IsBabelfishParallelWorker() && perminfo->permChecked) + continue; + Assert(OidIsValid(perminfo->relid)); result = ExecCheckOneRelPerms(perminfo); if (!result) @@ -624,6 +627,7 @@ ExecCheckPermissions(List *rangeTable, List *rteperminfos, get_rel_name(perminfo->relid)); return false; } + perminfo->permChecked = (sql_dialect == SQL_DIALECT_TSQL); } if (ExecutorCheckPerms_hook) @@ -840,10 +844,9 @@ InitPlan(QueryDesc *queryDesc, int eflags) int i; /* - * Do permissions checks if not Babelfish parallel worker + * Do permissions checks */ - if (!IsBabelfishParallelWorker()) - ExecCheckPermissions(rangeTable, plannedstmt->permInfos, true); + ExecCheckPermissions(rangeTable, plannedstmt->permInfos, true); /* * initialize the node's execution state diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index ef23f41864b..dd7b5be71fd 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1297,6 +1297,7 @@ typedef struct RTEPermissionInfo Bitmapset *selectedCols; /* columns needing SELECT permission */ Bitmapset *insertedCols; /* columns needing INSERT permission */ Bitmapset *updatedCols; /* columns needing UPDATE permission */ + bool permChecked; /* Permission check is done for given relid? */ } RTEPermissionInfo; /*