Hi Amit, On Sat, Feb 15, 2025 at 3:51 PM Amit Langote <amitlangot...@gmail.com> wrote: > > Hi Alexander, > > On Sat, Feb 15, 2025 at 6:00 AM Alexander Lakhin <exclus...@gmail.com> wrote: > > > > Hello Amit, > > > > 06.02.2025 04:35, Amit Langote wrote: > > > > I plan to push 0001 tomorrow, barring any objections. > > > > > > Please try the following script: > > CREATE TABLE pt (a int, b int) PARTITION BY range (a); > > CREATE TABLE tp1 PARTITION OF pt FOR VALUES FROM (1) TO (2); > > CREATE TABLE tp2 PARTITION OF pt FOR VALUES FROM (2) TO (3); > > > > MERGE INTO pt > > USING (SELECT pg_backend_pid() AS pid) AS q JOIN tp1 ON (q.pid = tp1.a) > > ON pt.a = tp1.a > > WHEN MATCHED THEN DELETE; > > > > which fails for me with segfault: > > Program terminated with signal SIGSEGV, Segmentation fault. > > #0 ExecInitMerge (mtstate=0x5a9b9fbccae0, estate=0x5a9b9fbcbe20) at > > nodeModifyTable.c:3680 > > 3680 relationDesc = > > RelationGetDescr(resultRelInfo->ri_RelationDesc); > > (gdb) bt > > #0 ExecInitMerge (mtstate=0x5a9b9fbccae0, estate=0x5a9b9fbcbe20) at > > nodeModifyTable.c:3680 > > #1 0x00005a9b67e6dfb5 in ExecInitModifyTable (node=0x5a9b9fbd5858, > > estate=0x5a9b9fbcbe20, eflags=0) at nodeModifyTable.c:4906 > > #2 0x00005a9b67e273f7 in ExecInitNode (node=0x5a9b9fbd5858, > > estate=0x5a9b9fbcbe20, eflags=0) at execProcnode.c:177 > > #3 0x00005a9b67e1b9d2 in InitPlan (queryDesc=0x5a9b9fbb9970, eflags=0) at > > execMain.c:1092 > > #4 0x00005a9b67e1a524 in standard_ExecutorStart (queryDesc=0x5a9b9fbb9970, > > eflags=0) at execMain.c:268 > > #5 0x00005a9b67e1a223 in ExecutorStart (queryDesc=0x5a9b9fbb9970, > > eflags=0) at execMain.c:142 > > ... > > > > starting from cbc127917. > > > > (I've discovered this anomaly with SQLsmith.) > > Thanks! It looks like I missed updating the MERGE-related lists in > ModifyTable. > > I've attached a fix with a test added based on your example. I plan to > push this on Monday. >
I applied the patch and the problem solved, I have a small question that should the following line ``` if (node->mergeActionLists == NIL) ``` be changed to ``` if (mtstate->mt_mergeActionLists == NIL) ``` ISTM that if we have pruned all the merge actions, there is no harm we omit setting mtstate->mt_merge_subcommands to 0. > -- > Thanks, Amit Langote -- Regards Junwang Zhao