Re: Idea: Avoid JOINs by using path expressions to follow FKs

Isaac Morland <isaac.morland@gmail.com>

From: Isaac Morland <isaac.morland@gmail.com>
To: Joel Jacobson <joel@compiler.org>
Cc: Vik Fearing <vik@postgresfriends.org>, Tom Lane <tgl@sss.pgh.pa.us>, Andrew Dunstan <andrew@dunslane.net>, Alvaro Herrera <alvherre@alvh.no-ip.org>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2021-03-30T19:02:17Z
Lists: pgsql-hackers
On Tue, 30 Mar 2021 at 14:30, Joel Jacobson <joel@compiler.org> wrote:

If the expression ends with a column_name,
> you get the value for the column.
>
> If the expression ends with a constraint_name,
> you get the referenced table as a record.
>

Can’t you just leave off the “ends with a column_name” part? If you want
one of its columns, just put .column_name:

table -> constraint -> ... -> constraint . column_name

Then you know that -> expects a constraint_name and only that to its right.

Also, should the join be a left join, which would therefore return a NULL
when there is no matching record? Or could we have a variation such as ->?
to give a left join (NULL when no matching record) with -> using an inner
join (record is not included in result when no matching record).

For the record I would find something like this quite useful. I constantly
find myself joining in code lookup tables and the like, and while from a
mathematical view it’s just another join, explicitly listing the table in
the FROM clause of a large query does not assist with readability to say
the least.

Commits

  1. Clean up generation of default names for constraints, indexes, and serial