From: | David Rowley <david(dot)rowley(at)2ndquadrant(dot)com> |
---|---|
To: | Antonin Houska <ah(at)cybertec(dot)at> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Converting NOT IN to anti-joins during planning |
Date: | 2019-07-01 11:23:34 |
Message-ID: | CAKJS1f9rBC=CXJB5y2c9NqhGstbKAPZ2PiTvA1mUc9GFS41pgg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Mon, 27 May 2019 at 20:43, Antonin Houska <ah(at)cybertec(dot)at> wrote:
> I've spent some time looking into this.
Thank you for having a look at this.
> One problem I see is that SubLink can be in the JOIN/ON clause and thus it's
> not necessarily at the top of the join tree. Consider this example:
>
> CREATE TABLE a(i int);
> CREATE TABLE b(j int);
> CREATE TABLE c(k int NOT NULL);
> CREATE TABLE d(l int);
>
> SELECT *
> FROM
> a
> JOIN b ON b.j NOT IN
> ( SELECT
> c.k
> FROM
> c)
> JOIN d ON b.j = d.l;
hmm yeah. Since the proofs that are being used in
expressions_are_not_nullable assume the join has already taken place,
then we'll either need to not use the join conditions are proofs in
that case, or just disable the optimisation instead. I think it's
fine to just disable the optimisation since it seem rather unlikely
that someone would write a join condition like that. Plus it seems
quite a bit more complex to validate that the optimisation would even
be correct if NULLs were not possible.
I've attached a patch which restricts the pullups to FromExpr quals.
Anything below a JoinExpr disables the optimisation now.
--
David Rowley http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
Attachment | Content-Type | Size |
---|---|---|
not_in_anti_join_v2.patch | application/octet-stream | 56.6 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2019-07-01 11:29:18 | Re: Tid scan improvements |
Previous Message | Thomas Munro | 2019-07-01 11:19:31 | Re: shared-memory based stats collector |