> On Jul 20, 2026, at 16:56, Dean Rasheed <[email protected]> wrote:
> 
> On Thu, 16 Jul 2026 at 07:20, Chao Li <[email protected]> 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 RETURNING for 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 table may 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 temporarily changed 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/




Attachment: v2-0001-Avoid-RETURNING-side-effects-for-FOR-PORTION-OF-l.patch
Description: Binary data

Reply via email to