> 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/
v2-0001-Avoid-RETURNING-side-effects-for-FOR-PORTION-OF-l.patch
Description: Binary data
