> On Jul 20, 2026, at 16:56, Dean Rasheed <dean.a.rasheed@gmail.com> wrote:
>
> On Thu, 16 Jul 2026 at 07:20, Chao Li <li.evan.chao@gmail.com> wrote:
>
>> To fix the problem, since leftover rows are inserted by calling ExecInsert(), and ExecInsert() is a local static
function,I think a simple and safe solution is to add a new parameter to ExecInsert() to indicate whether to process
RETURNINGfor this insert. Then UPDATE/DELETE FOR PORTION OF can bypass RETURNING processing for leftover rows.
>
> I don't particularly like adding another argument to ExecInsert(). I
> think it can work out from its existing arguments whether it's part of
> a FOR PORTION OF query (by looking at mtstate).
>
Okay. We cannot simply check node->forPortionOf to bypass RETURNING processing, because an FPO update on a partitioned
tablemay move a row to a different partition. In that case, ExecInsert() is also called to insert the row into the new
partition.
However, in that case, mtstate->operation is still CMD_UPDATE, while for leftover rows, mtstate->operation is
temporarilychanged to CMD_INSERT. So we can check both node->forPortionOf and mtstate->operation.
PFA v2 with the new implementation. I tried to run check-world and it passed.
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/