Re: Postgres_fdw join pushdown - INNER - FULL OUTER join combination generating wrong result

From: Etsuro Fujita <fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp>
To: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
Cc: Rajkumar Raghuwanshi <rajkumar(dot)raghuwanshi(at)enterprisedb(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Postgres_fdw join pushdown - INNER - FULL OUTER join combination generating wrong result
Date: 2016-04-14 03:12:22
Message-ID: 570F0A96.2000008@lab.ntt.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2016/03/29 23:20, Ashutosh Bapat wrote:
> I think the reason for that is in foreign_join_ok. This in that
> function:
>
> wrongly pulls up remote_conds from joining relations in the FULL
> JOIN case. I think we should not pull up such conditions in the
> FULL JOIN case.

> Right. For a full outer join, since each joining relation acts as outer
> for the other, we can not pull up the quals to either join clauses or
> other clauses. So, in such a case, we will need to encapsulate the
> joining relation with conditions into a subquery. Unfortunately, the
> current deparse logic does not handle this encapsulation. Adding that
> functionality so close to the feature freeze might be risky given the
> amount of code changes required.
>
> PFA patch with a quick fix. A full outer join with either of the joining
> relations having WHERE conditions (or other clauses) is not pushed down.
> In the particular case that was reported, the bug triggered because of
> the way conditions are handled for an inner join. For an inner join, all
> the conditions in ON as well as WHERE clause are treated like they are
> part of WHERE clause. This allows pushing down a join even if there are
> unpushable join clauses. But the pushable conditions can be put back
> into the ON clause. This avoids using subqueries while deparsing.

I'm not sure that is a good idea. As you mentioned, we could support
FULL JOIN fully, by encapsulating a joining relation with conditions
into a subquery. And ISTM that it is relatively easy to do that, by
borrowing some ideas from Hanada-san's original join pushdown patch. If
it's OK, I'll create a patch for that in a few days.

Sorry for speaking up late.

Best regards,
Etsuro Fujita

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Etsuro Fujita 2016-04-14 03:21:47 Re: Odd system-column handling in postgres_fdw join pushdown patch
Previous Message Noah Misch 2016-04-14 03:10:43 Re: Performance degradation in commit 6150a1b0