Re: BUG #17233: Incorrect behavior of DELETE command with bad subquery in WHERE clause

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Bruce Momjian <bruce@momjian.us>
Cc: "David G. Johnston" <david.g.johnston@gmail.com>, "lxndrkrlv@gmail.com" <lxndrkrlv@gmail.com>, "pgsql-bugs@lists.postgresql.org" <pgsql-bugs@lists.postgresql.org>
Date: 2022-08-18T21:52:08Z
Lists: pgsql-bugs
Bruce Momjian <bruce@momjian.us> writes:
> Feedback?

>  -- test some error cases where LATERAL should have been used but wasn't
>  select f1,g from int4_tbl a, (select f1 as g) ss;
>  ERROR:  column "f1" does not exist
>  LINE 1: select f1,g from int4_tbl a, (select f1 as g) ss;
>                                               ^
> -HINT:  There is a column named "f1" in table "a", but it cannot be referenced from this part of the query.
> +HINT:  There is a column named "f1" in table "a" and another table so a table-qualified column reference is required.

That one has gone from accurate to completely wrong.  First, it's not
the case that there's more than one possible referent, and second,
table-qualifying the reference wouldn't help.  What *would* help here
is adding LATERAL, but I'm not sure if we can easily tell whether that
is the case.

I think perhaps the existing message is mislabeled: it's not a hint
as written, but errdetail, because it's entirely factual.  For this
particular example, what would be on-point is

DETAIL:  There is a column named "f1" in table "a", but it cannot be referenced from this part of the query.
HINT:  To reference that column, you must mark this subquery with LATERAL.

While we don't insist that hints be 100% accurate, it's not good
if they're wildly unhelpful.  So I'm not sure if we can determine
whether or not it's likely to be on-point.

I didn't look too closely at your other examples.

			regards, tom lane



Commits

  1. Give better hints for ambiguous or unreferenceable columns.

  2. Make subquery aliases optional in the FROM clause.