diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index e14b53bf9e..8ed5d5c43e 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -51,13 +51,6 @@ GetNewTransactionId(bool isSubXact) FullTransactionId full_xid; TransactionId xid; - /* - * Workers synchronize transaction state at the beginning of each parallel - * operation, so we can't account for new XIDs after that point. - */ - if (IsInParallelMode()) - elog(ERROR, "cannot assign TransactionIds during a parallel operation"); - /* * During bootstrap initialization, we return the special bootstrap * transaction id. diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 1b92d6f603..9d20c1ab99 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -580,7 +580,7 @@ AssignTransactionId(TransactionState s) * Workers synchronize transaction state at the beginning of each parallel * operation, so we can't account for new XIDs at this point. */ - if (IsInParallelMode() || IsParallelWorker()) + if (IsParallelWorker()) elog(ERROR, "cannot assign XIDs during a parallel operation"); /* diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index b406d41e91..fc0d2f0f7a 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -337,7 +337,7 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, */ if ((cursorOptions & CURSOR_OPT_PARALLEL_OK) != 0 && IsUnderPostmaster && - parse->commandType == CMD_SELECT && + (parse->commandType == CMD_SELECT || parse->commandType == CMD_INSERT) && !parse->hasModifyingCTE && max_parallel_workers_per_gather > 0 && !IsParallelWorker())