Re: apply_scanjoin_target_to_paths and partitionwise join

Robert Haas <robertmhaas@gmail.com>

From: Robert Haas <robertmhaas@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>, Andrei Lepikhov <lepihov@gmail.com>, Jakub Wartak <jakub.wartak@enterprisedb.com>, Tomas Vondra <tomas.vondra@enterprisedb.com>, arne.roland@malkut.net, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Julien Rouhaud <rjuju123@gmail.com>, Etsuro Fujita <etsuro.fujita@gmail.com>, Richard Guo <guofenglinux@gmail.com>
Date: 2025-01-02T21:32:09Z
Lists: pgsql-hackers
On Thu, Jan 2, 2025 at 3:58 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> I am wondering if the problem is not that the plan is slower, it's
> that for some reason the planner took a lot longer to create it.
> It's very plausible that partitionwise planning takes longer, and
> maybe we have some corner cases where the time is O(N^2) or worse.

That doesn't seem like a totally unreasonable speculation, but it
seems a little surprising that retaining the non-partitionwise paths
would fix it. True, that might let us discard a bunch of partitionwise
paths more quickly than would otherwise be possible, but I wouldn't
expect that to have an impact as dramatic as what Jakub alleged. The
thing I thought about was whether there might be some weird effects
with lots of empty partitions; or maybe with some other property of
the path like say sort keys or parallelism. For example if we couldn't
generate a partitionwise path with sort keys as good as the
non-partitionwise path had, or if we couldn't generate a parallel
partitionwise path but we could generate a parallel non-partitionwise
path. As far as I knew neither of those things are real problems, but
if they were then I believe they could pretty easily explain a large
regression.

> However, this is pure speculation without a test case, and any
> proposed fix would be even more speculative.  I concur with your
> bottom line: we should insist on a public test case before deciding
> what to do about it.

Yeah.

-- 
Robert Haas
EDB: http://www.enterprisedb.com



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Remove redundant SET enable_partitionwise_join = on.

  2. Don't reset the pathlist of partitioned joinrels.

  3. Allow left join removals and unique joins on partitioned tables

  4. Consider fractional paths in generate_orderedappend_paths

  5. Fix handling of targetlist SRFs when scan/join relation is known empty.