On Fri, Feb 19, 2021 at 6:56 AM Greg Nancarrow <gregn4...@gmail.com> wrote: > > Posting a new version of the patches, with the following updates: >
I am not happy with the below code changes, I think we need a better way to deal with this. @@ -313,19 +314,35 @@ standard_planner(Query *parse, const char *query_string, int cursorOptions, glob->transientPlan = false; glob->dependsOnRole = false; + if (IsModifySupportedInParallelMode(parse->commandType) && + !parse->hasModifyingCTE) + { + /* + * FIXME + * There is a known bug in the query rewriter: re-written queries with + * a modifying CTE may not have the "hasModifyingCTE" flag set. When + * that bug is fixed, this temporary fix must be removed. + * + * Note that here we've made a fix for this problem only for a + * supported-in-parallel-mode table-modification statement (i.e. + * INSERT), but this bug exists for SELECT too. + */ + parse->hasModifyingCTE = query_has_modifying_cte(parse); + } + I understand that this is an existing bug but I am not happy with this workaround. I feel it is better to check for modifyingCTE in max_parallel_hazard_walker. See attached, this is atop v18-0001-Enable-parallel-SELECT-for-INSERT-INTO-.-SELECT. -- With Regards, Amit Kapila.
fix_modifyingcte_parallel_safety_v1.patch
Description: Binary data