jian he <jian.universal...@gmail.com> 于2025年5月26日周一 17:30写道:

> On Mon, May 26, 2025 at 4:11 AM Dean Rasheed <dean.a.rash...@gmail.com>
> wrote:
> >
> > On Sun, 25 May 2025 at 13:41, Dean Rasheed <dean.a.rash...@gmail.com>
> wrote:
> > >
> >
> > 2. ExecInitModifyTable() does not initialize the WCO lists or
> > RETURNING list for rootResultRelInfo, so those never get executed.
> >
> > As it happens, it is possible to construct cases where (1) causes a
> > crash, even without WCO's or a RETURNING list (see the first test case
> > in the attached patch), so this bug goes all the way back to v15,
> > where MERGE was introduced.
> >
> > So I think we need to do something like the attached.
> >
> > There is perhaps scope to reduce the code duplication between this and
> > ExecInitPartitionInfo(), but that'd likely make the patch bigger, so I
> > think it's best to leave that for now.
>
> + Relation rootRelation = rootRelInfo->ri_RelationDesc;
> + Relation firstResultRel = mtstate->resultRelInfo[0].ri_RelationDesc;
> + int firstVarno = mtstate->resultRelInfo[0].ri_RangeTableIndex;
>
> firstResultRel may equal (==) to rootRelation,
> in that case, we don't need to call map_variable_attnos?
>
> +       if (rootRelInfo != mtstate->resultRelInfo &&
+               rootRelInfo->ri_RelationDesc->rd_rel->relkind !=
RELKIND_PARTITIONED_TABLE &&
+               (mtstate->mt_merge_subcommands & MERGE_INSERT) != 0)

Above if already does the check.


-- 
Thanks,
Tender Wang

Reply via email to