Re: MERGE issues around inheritance

Поиск
Список
Период
Сортировка
От Tender Wang
Тема Re: MERGE issues around inheritance
Дата
Msg-id CAHewXNmU-GyH7bMt1NszQy28qjS_3h6ki4nZR+c6d7-Hf-9F8g@mail.gmail.com
обсуждение исходный текст
Ответ на Re: MERGE issues around inheritance  (jian he <jian.universality@gmail.com>)
Ответы Re: MERGE issues around inheritance
Список pgsql-hackers


jian he <jian.universality@gmail.com> 于2025年5月26日周一 17:30写道:
On Mon, May 26, 2025 at 4:11 AM Dean Rasheed <dean.a.rasheed@gmail.com> wrote:
>
> On Sun, 25 May 2025 at 13:41, Dean Rasheed <dean.a.rasheed@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

В списке pgsql-hackers по дате отправления: