Re: Wrong rows estimations with joins of CTEs slows queries by more than factor 500
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Richard Guo <guofenglinux@gmail.com>
Cc: Jian Guo <gjian@vmware.com>, Tomas Vondra <tomas.vondra@enterprisedb.com>,
Hans Buschmann <buschmann@nidsa.net>,
"pgsql-hackers@lists.postgresql.org"
<pgsql-hackers@lists.postgresql.org>,
Zhenghua Lyu <zlyu@vmware.com>
Date: 2023-11-20T17:45:58Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow examine_simple_variable() to work on INSERT RETURNING Vars.
- 89b69db82adf 17.0 landed
-
Extract column statistics from CTE references, if possible.
- f7816aec23ee 17.0 landed
-
Remove SQL regression tests for GUCs related to NO_SHOW_ALL
- dbe8a1726cfd 15.3 cited
Richard Guo <guofenglinux@gmail.com> writes: > On Fri, Nov 17, 2023 at 11:38 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> That line of argument also leads to the conclusion that it'd be >> okay to expose info about the ordering of the CTE result to the >> upper planner. > In the light of this conclusion, I had a go at propagating the pathkeys > from CTEs up to the outer planner and came up with the attached. Oh, nice! I remembered we had code already to do this for regular SubqueryScans, but I thought we'd need to do some refactoring to apply it to CTEs. I think you are right though that convert_subquery_pathkeys can be used as-is. Some thoughts: * Do we really need to use make_tlist_from_pathtarget? Why isn't the tlist of the cteplan good enough (indeed, more so)? * I don't love having this code assume that it knows how to find the Path the cteplan was made from. It'd be better to make SS_process_ctes save that somewhere, maybe in a list paralleling root->cte_plan_ids. Alternatively: maybe it's time to do what the comments in SS_process_ctes vaguely speculate about, and just save the Path at that point, with construction of the plan left for createplan()? That might be a lot of refactoring for not much gain, so not sure. regards, tom lane