Re: Implement hook for self-join simplification - Mailing list pgsql-hackers

From Andrey Lepikhov
Subject Re: Implement hook for self-join simplification
Date
Msg-id ea48d65b-b8b5-5be6-7d2e-419f7d0924a8@postgrespro.ru
Whole thread Raw
In response to Implement hook for self-join simplification  (Leif Harald Karlsen <leifhka@ifi.uio.no>)
Responses Re: Implement hook for self-join simplification
List pgsql-hackers
On 24/6/2022 18:58, Leif Harald Karlsen wrote:
> I have a made a small deductive database on top of PostgreSQL for 
> educational/research purposes. In this setting, due to certain 
> VIEW-constructions, queries often end up being self-joins on primary 
> keys, e.g.:
> SELECT t1.id, t2.val
> FROM t AS t1 JOIN t AS t2 USING (id);
> 
> where t(id) is a primary key. This query is equivalent to the much more 
> efficient:
> SELECT id, val FROM t AS t1;
> 
> However, PostgreSQL currently does not seem to implement this 
> simplification. Therefore, I have looked into writing an extension that 
> performs this, but I am struggling a bit with finding out when this 
> simplification should be done, i.e. which hook I should implement.
It is true, but you can use a proposed patch that adds such 
functionality [1].

I tried to reproduce your case:
CREATE TABLE t(id int PRIMARY KEY, val text);
explain verbose
SELECT t1.id, t2.val FROM t AS t1 JOIN t AS t2 USING (id);

With this patch you will get a plan:
  Seq Scan on public.t t2
    Output: t2.id, t2.val
    Filter: (t2.id IS NOT NULL)

The approach, implemented in this patch looks better because removes 
self-joins on earlier stage than the path generation stage. Feel free to 
use it in your research.

[1] 
https://www.postgresql.org/message-id/a1d6290c-44e0-0dfc-3fca-66a68b3109ef@postgrespro.ru

-- 
regards,
Andrey Lepikhov
Postgres Professional



pgsql-hackers by date:

Previous
From: Ekaterina Sokolova
Date:
Subject: Re: [PATCH] Add extra statistics to explain for Nested Loop
Next
From: Andrey Borodin
Date:
Subject: Re: array_cat anycompatible change is breaking xversion upgrade tests