diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2020-08-22 14:46:40 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2020-08-22 14:46:40 -0400 |
commit | 6b701eaaa90e07035f9a965d7ca9831d01586c63 (patch) | |
tree | ab47872452dae9422cbdda58312190a1f519d3bc /doc/src | |
parent | 2060f0064e856ed0648ef2a77cda085d35837bca (diff) | |
download | postgresql-6b701eaaa90e07035f9a965d7ca9831d01586c63.tar.gz postgresql-6b701eaaa90e07035f9a965d7ca9831d01586c63.zip |
Avoid pushing quals down into sub-queries that have grouping sets.
The trouble with doing this is that an apparently-constant subquery
output column isn't really constant if it is a grouping column that
appears in only some of the grouping sets. A qual using such a
column would be subject to incorrect const-folding after push-down,
as seen in bug #16585 from Paul Sivash.
To fix, just disable qual pushdown altogether if the sub-query has
nonempty groupingSets. While we could imagine far less restrictive
solutions, there is not much point in working harder right now,
because subquery_planner() won't move HAVING clauses to WHERE within
such a subquery. If the qual stays in HAVING it's not going to be
a lot more useful than if we'd kept it at the outer level.
Having said that, this restriction could be removed if we used a
parsetree representation that distinguished such outputs from actual
constants, which is something I hope to do in future. Hence, make
the patch a minimal addition rather than integrating it more tightly
(e.g. by renumbering the existing items in subquery_is_pushdown_safe's
comment).
Back-patch to 9.5 where grouping sets were introduced.
Discussion: https://postgr.es/m/16585-9d8c340d23ade8c1@postgresql.org
Diffstat (limited to 'doc/src')
0 files changed, 0 insertions, 0 deletions