Re: Missing MaterialPath support in reparameterize_path_by_child
Richard Guo <guofenglinux@gmail.com>
From: Richard Guo <guofenglinux@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2022-12-02T07:29:28Z
Lists: pgsql-hackers
On Fri, Dec 2, 2022 at 10:55 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > I traced that to the fact that reparameterize_path_by_child() > omits support for MaterialPath, so that if the only surviving > path(s) for a child join include materialization steps, we'll > fail outright to produce a plan for the parent join. Yeah, that's true. It's weird we neglect MaterialPath here. > Unfortunately, I don't have an example that produces such a > failure against HEAD. It seems certain to me that such cases > exist, though, so I'd like to apply and back-patch the attached. I tried on HEAD and got one, which leverages sampled rel to generate the MaterialPath and lateral reference to make it the only available path. SET enable_partitionwise_join to true; CREATE TABLE prt (a int, b int) PARTITION BY RANGE(a); CREATE TABLE prt_p1 PARTITION OF prt FOR VALUES FROM (0) TO (10); CREATE EXTENSION tsm_system_time; explain (costs off) select * from prt t1 left join lateral (select t1.a as t1a, t2.a as t2a from prt t2 TABLESAMPLE system_time (10)) ss on ss.t1a = ss.t2a; ERROR: could not devise a query plan for the given query Thanks Richard
Commits
-
Add missing MaterialPath support in reparameterize_path[_by_child].
- 6eb2f0ed4cd5 16.0 landed
-
Fix generate_partitionwise_join_paths() to tolerate failure.
- fe12f2f8fa60 16.0 landed
- ec3daeec316f 14.7 landed
- bf8fd64ff5e6 15.2 landed
- 4ebca555cf23 13.10 landed
- 2df073313934 11.19 landed
- 1ff549e844cc 12.14 landed