About the constant-TRUE clause in reconsider_outer_join_clauses

From: Richard Guo <guofenglinux(at)gmail(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: About the constant-TRUE clause in reconsider_outer_join_clauses
Date: 2023-03-25 08:13:48
Message-ID: CAMbWs48=wUECRpFb7NNUBY10miChk-JWS5FAj5N7-Ee_m7WW7w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I happened to notice a constant-TRUE clause with is_pushed_down being
true while its required_relids not including the OJ being formed, which
seems abnormal to me. It turns out that this clause comes from
reconsider_outer_join_clauses(), as a dummy replacement if we've
generated a derived clause. The comment explains this as

* If we do generate a derived clause,
* however, the outer-join clause is redundant. We must still put some
* clause into the regular processing, because otherwise the join will be
* seen as a clauseless join and avoided during join order searching.
* We handle this by generating a constant-TRUE clause that is marked with
* required_relids that make it a join between the correct relations.

Should we instead mark the constant-TRUE clause with required_relids
plus the OJ relid?

Besides, I think 'otherwise the join will be seen as a clauseless join'
is not necessarily true, because the join may have other join clauses
that do not have any match. As an example, consider

select * from a left join b on a.i = b.i and a.j = b.j where a.i = 2;

So should we use 'may' rather than 'will' here?

Even if the join does become clauseless, it will end up being an
unqualified nestloop. I think the join ordering algorithm will force
this join to be formed when necessary. So I begin to wonder if it's
really necessary to generate this dummy constant-TRUE clause.

Thanks
Richard

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jelte Fennema 2023-03-25 09:24:32 Re: running logical replication as the subscription owner
Previous Message houzj.fnst@fujitsu.com 2023-03-25 05:50:08 RE: Initial Schema Sync for Logical Replication