Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3d69efc

Browse files
committed
Build EC members for child join rels in the right memory context.
This patch prevents crashes or wrong plans when partition-wise joinsare considered during GEQO planning, as a consequence of theEquivalenceClass data structures becoming corrupt after a GEQOcontext reset.A remaining problem is that successive GEQO cycles will make multiplecopies of the required EC members, since add_child_join_rel_equivalenceshas no idea that such members might exist already. For now we'll justlive with that. The lack of field complaints of crashes suggests thatthis is a mighty little-used situation.Back-patch to v12 where this code was introduced.Discussion:https://postgr.es/m/1683100.1601860653@sss.pgh.pa.us
1 parent9b8e685 commit3d69efc

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

‎src/backend/optimizer/path/equivclass.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2234,10 +2234,21 @@ add_child_join_rel_equivalences(PlannerInfo *root,
22342234
{
22352235
Relidstop_parent_relids=child_joinrel->top_parent_relids;
22362236
Relidschild_relids=child_joinrel->relids;
2237+
MemoryContextoldcontext;
22372238
ListCell*lc1;
22382239

22392240
Assert(IS_JOIN_REL(child_joinrel)&&IS_JOIN_REL(parent_joinrel));
22402241

2242+
/*
2243+
* If we're being called during GEQO join planning, we still have to
2244+
* create any new EC members in the main planner context, to avoid having
2245+
* a corrupt EC data structure after the GEQO context is reset. This is
2246+
* problematic since we'll leak memory across repeated GEQO cycles. For
2247+
* now, though, bloat is better than crash. If it becomes a real issue
2248+
* we'll have to do something to avoid generating duplicate EC members.
2249+
*/
2250+
oldcontext=MemoryContextSwitchTo(root->planner_cxt);
2251+
22412252
foreach(lc1,root->eq_classes)
22422253
{
22432254
EquivalenceClass*cur_ec= (EquivalenceClass*)lfirst(lc1);
@@ -2334,6 +2345,8 @@ add_child_join_rel_equivalences(PlannerInfo *root,
23342345
}
23352346
}
23362347
}
2348+
2349+
MemoryContextSwitchTo(oldcontext);
23372350
}
23382351

23392352

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp