On Thu, Mar 4, 2021 at 11:05 PM Amit Kapila <amit.kapil...@gmail.com> wrote:
>
> On Thu, Mar 4, 2021 at 5:24 PM Greg Nancarrow <gregn4...@gmail.com> wrote:
> >
> > On Thu, Mar 4, 2021 at 10:07 PM Amit Kapila <amit.kapil...@gmail.com> wrote:
> > >
> >
> > >Also, in
> > > standard_planner, we should add these partitionOids only for
> > > parallel-mode.
> > >
> >
> > It is doing that in v20 patch (what makes you think it isn't?).
> >
>
> The below code snippet:
> + /* For AcquireExecutorLocks(). */
> + if (IsModifySupportedInParallelMode(parse->commandType))
> + result->partitionOids = glob->partitionOids;
>
> I understand that you have a check for the parallel mode in
> AcquireExecutorLocks but why can't we have it before adding that to
> planned statement
>

OK, I think I'm on the same wavelength now (sorry, I didn't realise
you're talking about PlannedStmt).

What  I believe you're suggesting is in the planner where
partitionOids are "added" to the returned PlannedStmt, they should
only be added if glob->parallelModeNeeded is true:.

i.e.

        /* For AcquireExecutorLocks(). */
        if (glob->partitionOids != NIL && glob->parallelModeNeeded)
                result->partitionOids = glob->partitionOids;

(seems reasonable to me, as then it will match the condition for which
glob->partitionOids are added to glob->relationOids)

then in plancache.c the check on parallelModeNeeded can be removed:

            /* Lock partitions ahead of modifying them in parallel mode. */
            if (rti == resultRelation &&
                plannedstmt->partitionOids != NIL)
                AcquireExecutorLocksOnPartitions(plannedstmt->partitionOids,
                                                 rte->rellockmode, acquire);

Let me know if this matches what you were thinking.

Regards,
Greg Nancarrow
Fujitsu Australia


Reply via email to