Re: Re: BUG #8444: ERROR: table name "tblb" specified more than once in subquery

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: David Johnston <polobo(at)yahoo(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: Re: BUG #8444: ERROR: table name "tblb" specified more than once in subquery
Date: 2013-09-13 15:20:00
Message-ID: 1080.1379085600@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

David Johnston <polobo(at)yahoo(dot)com> writes:
>> Here is a minimal query that demonstrates the problem. In 9.1 it works:
>>
>> chris=# select * FROM current_user u join (current_user u cross join
>> current_user v) x on true;
>>
>> On 9.3 it fails:
>> ERROR: table name "u" specified more than once

This is an intentional change that came in with the LATERAL feature.
The query is illegal per SQL spec but we used to allow it anyway,
on the theory that the table name "u" inside the aliased join "x"
wasn't visible anywhere that the other "u" was visible, so the
duplicate alias name was harmless. But in the presence of LATERAL
it's not harmless; consider

select * FROM current_user u join
(current_user u cross join LATERAL (select u.x) v) x on true;

Which instance of "u" does the lateral reference refer to?

(I think there was some discussion of this in the pgsql-hackers list
about a year ago, but I couldn't find it in a desultory search.)

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message David Johnston 2013-09-13 15:41:31 Re: BUG #8444: ERROR: table name "tblb" specified more than once in subquery
Previous Message stuart 2013-09-13 12:13:20 BUG #8450: pg_basebackup blocks until WAL archiving successful