Re: Idea: Avoid JOINs by using path expressions to follow FKs - Mailing list pgsql-hackers

From Joel Jacobson
Subject Re: Idea: Avoid JOINs by using path expressions to follow FKs
Date
Msg-id 1ade97b3-2e0c-4146-b6ab-140304ed6313@www.fastmail.com
Whole thread Raw
In response to Re: Idea: Avoid JOINs by using path expressions to follow FKs  (Rod Taylor <rbt@rbt.ca>)
List pgsql-hackers
On Tue, Mar 30, 2021, at 16:25, Rod Taylor wrote:
On Sat, 27 Mar 2021 at 16:28, Joel Jacobson <joel@compiler.org> wrote:
Imagine if we could simply write the SQL query like this:

SELECT DISTINCT od.order_id.customer_id.company_name
FROM order_details AS od
WHERE od.product_id.product_name = 'Chocolade';

I regularly do this type of thing via views. It's a bit confusing as writes go to one set of tables while selects often go through the view with all the details readily available.

I think I'd want these shortcuts to be well defined and obvious to someone exploring via psql. I can also see uses where a foreign key might not be available (left join rather than join).

I wonder if GENERATED ... VIRTUAL might be a way of defining this type of added record.

ALTER TABLE order ADD customer record GENERATED JOIN customer USING (customer_id) VIRTUAL;
ALTER TABLE order_detail ADD order record GENERATED JOIN order USING (order_id) VIRTUAL;

SELECT order.customer.company_name FROM order_detail;

Of course, if they don't reference the GENERATED column then the join isn't added to the query.

Interesting idea, but not sure I like it, since you would need twice as many columns,
and you would still need the foreign keys, right?

/Joel

pgsql-hackers by date:

Previous
From: Maxim Orlov
Date:
Subject: Re: Failed assertion on standby while shutdown
Next
From: "Daniel Verite"
Date:
Subject: Re: Calendar support in localization