Re: PostgreSQL : error hint for LATERAL join - Mailing list pgsql-general

From Tom Lane
Subject Re: PostgreSQL : error hint for LATERAL join
Date
Msg-id 267695.1649686806@sss.pgh.pa.us
Whole thread Raw
In response to Re: PostgreSQL : error hint for LATERAL join  (PALAYRET Jacques <jacques.palayret@meteo.fr>)
Responses Re: PostgreSQL : error hint for LATERAL join  ("David G. Johnston" <david.g.johnston@gmail.com>)
List pgsql-general
PALAYRET Jacques <jacques.palayret@meteo.fr> writes:
> For me, one of the two following things should be true : either the hint (in case of a lateral error) is incomplete
orthe possibility of " cross join lateral " should be removed.  

The reason the hint is worded the way it is is a practical one: the other
possibilities are not drop-in syntactic replacements.

Given

    CREATE TABLE t (x float8);

all five of these are syntactically legal (with or without the
implied LATERAL):

    SELECT * FROM t, sin(x);
    SELECT * FROM t CROSS JOIN sin(x);
    SELECT * FROM t JOIN sin(x) ON true;
    SELECT * FROM t INNER JOIN sin(x) ON true;
    SELECT * FROM t LEFT JOIN sin(x) ON true;

The only way to get to the error in question is to write something
like

    SELECT * FROM t FULL JOIN sin(x) ON true;

If that's what you have, then changing FULL to INNER or LEFT will
produce a syntactically legal query; changing it to CROSS will not
unless you make additional changes (which'd be hard if the ON
condition were nontrivial).

Also, if we were trying to be completionist, we'd have to somehow
work in the comma and implicit-INNER syntaxes, which would surely
make the hint a confusing mess.

Another way to look at it is that there are only two allowed
semantic behaviors here: INNER and LEFT joins.  The fact that
there's more than one way to spell an inner join is a historical
accident.

            regards, tom lane



pgsql-general by date:

Previous
From: Pankaj Gupta
Date:
Subject: DBlink extension and behavior of dblink_get_connections()
Next
From: "David G. Johnston"
Date:
Subject: Re: PostgreSQL : error hint for LATERAL join