On 2017/10/23 2:07, Tom Lane wrote: > Andreas Seltenreich <seltenre...@gmx.de> writes: >> testing master as of 7c981590c2, sqlsmith just triggered the following >> assertion: >> TRAP: FailedAssertion("!(!((((const Node*)(node))->type) == T_SubLink))", >> File: "prepunion.c", Line: 2231) > > Hmm. adjust_appendrel_attrs() thinks it's only used after conversion > of sublinks to subplans, but this is a counterexample. I wonder if > that assumption was ever correct? Or maybe we need to rethink what > it does when recursing into RTE subqueries.
Looking at the backtrace, the crashing SubLink seems to have been referenced from a PlaceHolderVar that is in turn referenced by joinaliasvars of a JOIN rte in query->rtable. I wonder if we shouldn't just ignore those (joinaliasvars in JOIN rtes) while adjust_appendrel_attrs() is doing its job on a Query, just like we ask to ignore subqueries by passing QTW_IGNORE_RC_SUBQUERIES to query_tree_mutator()? IOW, it doesn't look like anything critically depends on the Vars referenced from joinaliasvars being translated at that point in inheritance_planner(), but I may be missing something. The attached patch to do the same, while didn't break any existing tests, fixed the crash reported by OP. Thoughts? Thanks, Amit
diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 1c84a2cb28..4bdfe73d29 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -1964,7 +1964,8 @@ adjust_appendrel_attrs(PlannerInfo *root, Node *node, int nappinfos, newnode = query_tree_mutator((Query *) node, adjust_appendrel_attrs_mutator, (void *) &context, - QTW_IGNORE_RC_SUBQUERIES); + QTW_IGNORE_RC_SUBQUERIES | + QTW_IGNORE_JOINALIASES); for (cnt = 0; cnt < nappinfos; cnt++) { AppendRelInfo *appinfo = appinfos[cnt];
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers