Dean Rasheed <dean.a.rash...@gmail.com> 于2025年5月28日周三 18:26写道:

> On Mon, 26 May 2025 at 12:50, Tender Wang <tndrw...@gmail.com> wrote:
> >
> >> >  "it is possible for the parent to be excluded from the
> >> > plan and so all of the entries in the resultRelInfo array may be for
> >> > different relations than rootResultRelInfo."
> >> >
> >> > I didn't fully understand the above sentence.  Can you give me more
> information or an example?
> >> > If the parent is excluded from the plan, the first entry in the
> resultRelInfo array will not be the parent but some surviving child.
> >>
> >> There's an example in the updated regression tests. A non-inherited
> >> CHECK constraint on the parent causes the planner to exclude the
> >> parent from the relations being scanned and from the resultRelInfo
> >> array, so the first resultRelInfo entry is for a child relation.
> >
> > Yes, it is.  I debugged the updated regression tests. It would crash if
> resultRelInfo were used instead of rootResultInfo.
> > Is that the reason that we must use rootResultInfo?
> >
>
> Yes. To work correctly for an inherited table, ExecInsert() must be
> passed a pointer to a ResultRelInfo structure that points to the
> parent table.
>
> As I mentioned before, this goes back to commit 387f9ed0a08, so it's
> worth reading that in more detail.
>
> Prior to commit 387f9ed0a08, rootResultInfo was equal to resultRelInfo
> for an inherited table, which was wrong because that could point to a
> child table, if the parent table was excluded from the plan.
>
> Commit 387f9ed0a08 fixed that by changing the planner so that it set
> ModifyTable.rootRelation to the index of the parent table, if it was
> an inherited table. As a result, starting from that commit, for an
> inherited table, rootResultInfo is a different ResultRelInfo structure
> which always points to the parent table, making it the correct thing
> to pass to ExecInsert() under all circumstances.
>

Yeah.  Your explanation above made me understand completely.
Thanks for your explanation.

>
> The thing that was overlooked was that the separate ResultRelInfo
> structure in rootResultInfo, and the insert projection, weren't being
> correctly initialised for MERGE, which is what this patch aims to fix.
>

Yes,  it is.

> Unless there are any further comments, I plan to commit it in a day or
> so.
>
I don't have any other comments. It looks good for me.


-- 
Thanks,
Tender Wang

Reply via email to