Re: Properly pathify the union planner
David Rowley <dgrowleyml@gmail.com>
From: David Rowley <dgrowleyml@gmail.com>
To: Richard Guo <guofenglinux@gmail.com>
Cc: Alexander Lakhin <exclusion@gmail.com>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2024-03-27T09:47:54Z
Lists: pgsql-hackers
On Wed, 27 Mar 2024 at 16:15, Richard Guo <guofenglinux@gmail.com> wrote: > if (root->parent_root != NULL && > root->parent_root->parse->setOperations != NULL && > IsA(root->parent_root->parse->setOperations, SetOperationStmt)) > qp_extra.setop = > (SetOperationStmt *) root->parent_root->parse->setOperations; > else > qp_extra.setop = NULL; > > This check cannot tell if the subquery is for a set operation or a CTE, > because its parent might have setOperations set in both cases. Hmm, is > there any way to differentiate between the two? As far as I see, there's nothing to go on... well unless you counted canSetTag, which is false for the CTE (per analyzeCTE())... but that's certainly not the fix. I did wonder when first working on this patch if subquery_planner() should grow an extra parameter, or maybe consolidate some existing ones by passing some struct that provides the planner with a bit more context about the query. A few of the existing parameters are likely candidates for being in such a struct. e.g. hasRecursion and tuple_fraction. A SetOperationStmt could go in there too. The other CTE thread about the PathKey change you worked on highlights that something like this could be useful. I posted in [1] about this. David [1] https://postgr.es/m/CAApHDvrF53ErmonnpO77eDiJm7PyReZ+nD=4FSsSOmaKx6+MuQ@mail.gmail.com
Commits
-
Don't adjust ressortgroupref in generate_setop_child_grouplist()
- 7487044d6ccf 17.0 landed
-
Don't zero tuple_fraction when planning UNIONs with ORDER BYs
- 3b1a7eb28930 17.0 landed
-
Fix assert failure when planning setop subqueries with CTEs
- d5d2205c8ddc 17.0 landed
-
Allow planner to use Merge Append to efficiently implement UNION
- 66c0185a3d14 17.0 landed
-
Simplify PathKey checking code
- 0c444a70f2a7 17.0 landed
-
Clarify the 'rows' parameter in create_append_path
- 87027cb55bf7 17.0 landed