BUG #18986: SIGSEGV in nodeModifyTable.c during Parallel Execution
От | PG Bug reporting form |
---|---|
Тема | BUG #18986: SIGSEGV in nodeModifyTable.c during Parallel Execution |
Дата | |
Msg-id | 18986-e7a8aac3d339fa47@postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #18986: SIGSEGV in nodeModifyTable.c during Parallel Execution
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 18986 Logged by: Yaroslav Syrytsia Email address: y@lll.gd PostgreSQL version: 17.5 Operating system: Ubuntu 22.04.5 Description: Hello, During testing a flow in an app, I encountered a segfault that only happens during parallel execution: https://gist.github.com/joy4eg/708458e204f52129a8e54a13534586b7 Looking into the coredump, it looks like a NULL pointer dereference is happening at https://github.com/postgres/postgres/blob/5e2f3df49d4298c6097789364a5a53be172f6e85/src/backend/executor/nodeModifyTable.c#L752 After further investigation, that part of the code looks suspicious as well: static void ExecInitInsertProjection(ModifyTableState *mtstate, ResultRelInfo *resultRelInfo) { ... /* Build ProjectionInfo if needed (it probably isn't). */ if (need_projection) { TupleDesc relDesc = RelationGetDescr(resultRelInfo->ri_RelationDesc); /* need an expression context to do the projection */ if (mtstate->ps.ps_ExprContext == NULL) ExecAssignExprContext(estate, &mtstate->ps); resultRelInfo->ri_projectNew = ExecBuildProjectionInfo(insertTargetList, mtstate->ps.ps_ExprContext, resultRelInfo->ri_newTupleSlot, &mtstate->ps, relDesc); } resultRelInfo->ri_projectNewInfoValid = true; // <--- it's set to true even if need_projection may be NULL. } (gdb) frame 0 #0 ExecGetUpdateNewTuple (oldSlot=0x55defb35ae20, planSlot=0x55defb41d9d8, relinfo=0x55defb312108) at executor/./build/../src/backend/executor/nodeModifyTable.c:752 752 econtext = newProj->pi_exprContext; (gdb) p relinfo $1 = (ResultRelInfo *) 0x55defb312108 (gdb) p *relinfo $2 = {type = T_ResultRelInfo, ri_RangeTableIndex = 15, ri_RelationDesc = 0x7f0c0eb80500, ri_NumIndices = 21, ri_IndexRelationDescs = 0x55defb358248, ri_IndexRelationInfo = 0x55defb358350, ri_RowIdAttNo = 1, ri_extraUpdatedCols = 0x55defb357300, ri_projectNew = 0x0, ri_newTupleSlot = 0x55defb323cf0, ri_oldTupleSlot = 0x55defb323ae8, ri_projectNewInfoValid = true, ri_needLockTagTuple = false, ri_TrigDesc = 0x55defb312310, ri_TrigFunctions = 0x55defb31a318, ri_TrigWhenExprs = 0x55defb2d8cf8, ri_TrigInstrument = 0x0, ri_ReturningSlot = 0x0, ri_TrigOldSlot = 0x55defb35ae20, ri_TrigNewSlot = 0x0, ri_FdwRoutine = 0x0, ri_FdwState = 0x0, ri_usesFdwDirectModify = false, ri_NumSlots = 0, ri_NumSlotsInitialized = 0, ri_BatchSize = 0, ri_Slots = 0x0, ri_PlanSlots = 0x0, ri_WithCheckOptions = 0x0, ri_WithCheckOptionExprs = 0x0, ri_ConstraintExprs = 0x0, ri_GeneratedExprsI = 0x0, ri_GeneratedExprsU = 0x55defb358140, ri_NumGeneratedNeededI = 0, ri_NumGeneratedNeededU = 2, ri_returningList = 0x55defb39c630, ri_projectReturning = 0x55defb323590, ri_onConflictArbiterIndexes = 0x0, ri_onConflict = 0x0, ri_MergeActions = {0x55defb324518, 0x0, 0x55defb328e50}, ri_MergeJoinCondition = 0x0, ri_PartitionCheckExpr = 0x0, ri_ChildToRootMap = 0x0, ri_ChildToRootMapValid = false, ri_RootToChildMap = 0x0, ri_RootToChildMapValid = false, ri_RootResultRelInfo = 0x0, ri_PartitionTupleSlot = 0x0, ri_CopyMultiInsertBuffer = 0x0, ri_ancestorResultRels = 0x0} Where: - ri_projectNewInfoValid = true - ri_projectNew = 0x0 Version tested: - 17.5 (ubuntu, apt, with and without pgroonga) - postgres:18beta1-bookworm (docker, without pgroonga) - postgres:17.5-bookworm (docker, without pgroonga) Yaroslav.
В списке pgsql-bugs по дате отправления: