Re: MERGE issues around inheritance - Mailing list pgsql-hackers

From Tender Wang
Subject Re: MERGE issues around inheritance
Date
Msg-id CAHewXNnJB+GRjPczwLFvGzC3hZB3xqy9be0+73sfpx57jENVsw@mail.gmail.com
Whole thread Raw
In response to Re: MERGE issues around inheritance  (Álvaro Herrera <alvherre@alvh.no-ip.org>)
List pgsql-hackers


Álvaro Herrera <alvherre@alvh.no-ip.org> 于2025年5月24日周六 17:11写道:
On 2025-May-21, Andres Freund wrote:

> Hi,
>
> In [1] I added some verification to projection building, to check if the
> tupleslot passed to ExecBuildProjectionInfo() is compatible with the target
> list.  One query in merge.sql [2] got flagged.
>
> Trying to debug that issue, I found another problem. This leaves us with:
>
> 1) w/ inheritance INSERTed rows are not returned by RETURNING. This seems to
>    just generally not work with MERGE

Hmm, curious.  One thing to observe is that the original source tuple is
in the child table, but the tuple inserted by MERGE ends up in the
parent table.  I'm guessing that the code gets confused as to the
relation that the tuple in the returned slot comes from, and that
somehow makes it somehow not "see" the tuple to process for RETURNING?
I dunno.  CC'ing Dean, who is more familiar with this code than I am.

 In ExecMergeNotMatched(), we passed the mtstate->rootResultRelInfo to ExecInsert().
In this case,  the ri_projectReturning of mtstate->rootResultRelInfo  is NULL,  in ExecInsert(),
the "if (resultRelInfo->ri_projectReturning)" branch will not run, so inheritance INSERTed rows are not returned by RETURNING.

The mtstate->rootResultRelInfo  assigned in ExecInitModifyTable()  is only here:
if (node->rootRelation > 0)
{
     Assert(bms_is_member(node->rootRelation, estate->es_unpruned_relids));
     mtstate->rootResultRelInfo = makeNode(ResultRelInfo);
     ExecInitResultRelation(estate, mtstate->rootResultRelInfo,
             node->rootRelation);
}
The ri_projectReturning is not assigned.

I try to pass resultRelInfo to ExecInsert, the inherited INSERTed rows are returned by RETURNING.
But some test cases in regression failed. 

--
Thanks,
Tender Wang

pgsql-hackers by date:

Previous
From: Dilip Kumar
Date:
Subject: Re: Understanding when VM record needs snapshot conflict horizon
Next
From: Dilip Kumar
Date:
Subject: Re: Hash table scans outside transactions