Re: BUG #17088: FailedAssertion in prepagg.c
От | Richard Guo |
---|---|
Тема | Re: BUG #17088: FailedAssertion in prepagg.c |
Дата | |
Msg-id | CAMbWs4_1m1Xd2JfCHFjGk9=Pj1gTiicYwG1JEpKLaxLub19RXA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #17088: FailedAssertion in prepagg.c (Richard Guo <guofenglinux@gmail.com>) |
Ответы |
Re: BUG #17088: FailedAssertion in prepagg.c
|
Список | pgsql-bugs |
On Thu, Jul 8, 2021 at 1:44 PM Richard Guo <guofenglinux@gmail.com> wrote:
On Thu, Jul 8, 2021 at 5:56 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:Andrew Gierth <andrew@tao11.riddles.org.uk> writes:
> "Tom" == Tom Lane <tgl@sss.pgh.pa.us> writes:
> Tom> Hmm. Maybe it'd be better if the default behavior in
> Tom> expression_tree_walker/mutator did not include recursing into the
> Tom> args, then?
> You'd think, but as I recall (I will re-check this to confirm) there
> were more places where we _did_ need to recurse (especially during parse
> analysis before we've matched up the sortgrouprefs), while most of the
> places where recursion needed to be explicitly avoided already needed
> special-case handling, so having the default the other way would likely
> have required a special-case almost everywhere.
Fair enough. This is the kind of design choice that can be worth
revisiting later; but if the conclusion is still the same, fine with me.I think the culprit is that when replacing correlation uplevel vars with
Params, we do not handle the SubLinks in the arguments of uplevel
GroupingFunc. We expect build_subplan should take care of it. But in
build_subplan, we ignore GroupingFunc incorrectly.
diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c
index 0881a208ac..e4918f275e 100644
--- a/src/backend/optimizer/plan/subselect.c
+++ b/src/backend/optimizer/plan/subselect.c
@@ -364,7 +364,8 @@ build_subplan(PlannerInfo *root, Plan *plan, PlannerInfo *subroot,
* SS_replace_correlation_vars). Do that now.
*/
if (IsA(arg, PlaceHolderVar) ||
- IsA(arg, Aggref))
+ IsA(arg, Aggref) ||
+ IsA(arg, GroupingFunc))
arg = SS_process_sublinks(root, arg, false);
into the arguments of an outer GroupingFunc. And that leads to a fix as
attached.
Thanks
Richard
Вложения
В списке pgsql-bugs по дате отправления: