]> granicus.if.org Git - postgresql/commit
Defer creation of partially-grouped relation until it's needed.
authorRobert Haas <rhaas@postgresql.org>
Tue, 20 Mar 2018 15:18:04 +0000 (11:18 -0400)
committerRobert Haas <rhaas@postgresql.org>
Tue, 20 Mar 2018 15:18:04 +0000 (11:18 -0400)
commit4f15e5d09de276fb77326be5567dd9796008ca2e
tree74dba423e209807ffea8d2fe56ba6c256b7d5acc
parent4dba331cb3dc1b5ffb0680ed8efae847de216796
Defer creation of partially-grouped relation until it's needed.

This avoids unnecessarily creating a RelOptInfo for which we have no
actual need.  This idea is from Ashutosh Bapat, who wrote a very
different patch to accomplish a similar goal.  It will be more
important if and when we get partition-wise aggregate, since then
there could be many partially grouped relations all of which could
potentially be unnecessary.  In passing, this sets the grouping
relation's reltarget, which wasn't done previously but makes things
simpler for this refactoring.

Along the way, adjust things so that add_paths_to_partial_grouping_rel,
now renamed create_partial_grouping_paths, does not perform the Gather
or Gather Merge steps to generate non-partial paths from partial
paths; have the caller do it instead.  This is again for the
convenience of partition-wise aggregate, which wants to inject
additional partial paths are created and before we decide which ones
to Gather/Gather Merge.  This might seem like a separate change, but
it's actually pretty closely entangled; I couldn't really see much
value in separating it and having to change some things twice.

Patch by me, reviewed by Ashutosh Bapat.

Discussion: http://postgr.es/m/CA+TgmoZ+ZJTVad-=vEq393N99KTooxv9k7M+z73qnTAqkb49BQ@mail.gmail.com
src/backend/optimizer/plan/planner.c