Обсуждение: 8.4 versus 8.2 against nonexistent column "name" ...
Can anyone shine a light on why 8.4 behaves surprisingly when being queried for a bogus column "name", but only using qualified table/ column references. Here's a sample script: ----- create table foo (id int,x int ); insert into foo(id, x) values(1, 23),(2, 43),(4, 45); -- Fails on both -- no column named 'name' select name from foo; -- Fails on 8.2, still no 'name' column, but 8.4 succeeds returning whole rows. select f.name from foo f; ---- On 8.2.11, both selects fail: CREATE TABLE INSERT 0 3 ERROR: column "name" does not exist LINE 1: select name from foo; ^ ERROR: column f.name does not exist LINE 1: select f.name from foo f; ^ On 8.4.2, the first select fails, but the second succeeds, returning whole rows wrapped up like tuples: CREATE TABLE INSERT 0 3 ERROR: column "name" does not exist LINE 1: select name from foo; ^ name -------- (1,23) (2,43) (4,45) (3 rows) A quick skim through the 8.3. and 8.4. release notes found nothing interesting related to 'name'. Thanks! ---- James Robinson Socialserve.com
2010/3/17 James Robinson <jlrobins@socialserve.com>: > Can anyone shine a light on why 8.4 behaves surprisingly when being queried > for a bogus column "name", but only using qualified table/column references. > > Here's a sample script: > > ----- > create table foo > ( > id int, > x int > ); > > insert into foo(id, x) > values > (1, 23), > (2, 43), > (4, 45); > > -- Fails on both -- no column named 'name' > select name from foo; > > -- Fails on 8.2, still no 'name' column, but 8.4 succeeds returning whole > rows. > select f.name from foo f; > ---- > > On 8.2.11, both selects fail: > > CREATE TABLE > INSERT 0 3 > ERROR: column "name" does not exist > LINE 1: select name from foo; > ^ > ERROR: column f.name does not exist > LINE 1: select f.name from foo f; > ^ > > > On 8.4.2, the first select fails, but the second succeeds, returning whole > rows wrapped up like tuples: > > CREATE TABLE > INSERT 0 3 > ERROR: column "name" does not exist > LINE 1: select name from foo; > ^ > name > -------- > (1,23) > (2,43) > (4,45) > (3 rows) > > A quick skim through the 8.3. and 8.4. release notes found nothing > interesting related to 'name'. > See this thread: http://archives.postgresql.org/pgsql-general/2010-02/msg01035.php Osvaldo