Re: Table alias fun == incorrectly adding tables to join...

From: Sean Chittenden <sean(at)chittenden(dot)org>
To: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: Table alias fun == incorrectly adding tables to join...
Date: 2003-09-22 20:13:59
Message-ID: 20030922201359.GF3288@perrin.nxad.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

> > Here's a fun one.
> >
> > test=# CREATE TABLE table_s1 (i int);
> > test=# CREATE TABLE table_s2 (j int);
> > test=# EXPLAIN ANALYZE SELECT table_s1.i, table_s2.j FROM table_s1 AS s1, table_s2 AS s2 WHERE s1.i = s2.j;
> > NOTICE: adding missing FROM-clause entry for table "table_s1"
> > NOTICE: adding missing FROM-clause entry for table "table_s2"
> > QUERY PLAN
> > ---------------------------------------------------------------------------------------------------------------------
> > Nested Loop (cost=0.00..0.03 rows=1 width=8) (actual time=0.03..0.03 rows=0 loops=1)
> > -> Nested Loop (cost=0.00..0.02 rows=1 width=4) (actual time=0.02..0.02 rows=0 loops=1)
> > -> Nested Loop (cost=0.00..0.01 rows=1 width=0) (actual time=0.01..0.01 rows=0 loops=1)
> > Join Filter: ("outer".i = "inner".j)
> > -> Seq Scan on table_s1 s1 (cost=0.00..0.00 rows=1 width=4) (actual time=0.01..0.01 rows=0 loops=1)
> > -> Seq Scan on table_s2 s2 (cost=0.00..0.00 rows=1 width=4) (never executed)
> > -> Seq Scan on table_s1 (cost=0.00..0.00 rows=1 width=4) (never executed)
> > -> Seq Scan on table_s2 (cost=0.00..0.00 rows=1 width=4) (never executed)
> > Total runtime: 0.20 msec
> > (9 rows)
> >
> > If there's real data in the tables, this joins the tables on itself
> > and execution times explode, naturally. I don't know if the spec says
> > this is the correct behavior or not, but I have a feeling its not and
> > this is a bug. -sc
>
> Well, the query is technically invalid I think.

I'm not 100% sure what the definition of invalid is... If I turn off
add_missing_from, it still fails. ex:

test=# EXPLAIN ANALYZE SELECT table_s1.i, table_s2.j FROM table_s1 AS s1, table_s2 AS s2 WHERE s1.i = s2.j;
ERROR: missing FROM-clause entry for table "table_s1"

I know the docs say, "When an alias is provided, it completely hides
the actual name of the table or function; for example given FROM foo
AS f, the remainder of the SELECT must refer to this FROM item as f
not foo." It just struck me as a strange behavior.

> The above is the expected behavior for 7.3 and earlier I believe
> (note the notices). IIRC, 7.4 has a guc option to turn the adding
> of missing from clauses off.

Correct. This is another IRC special, so I don't really care one way
or another, but it was certainly aggravating to track it down so I
figured I'd report it as the behavior seems a tad bogus in some cases,
though I do appreciate the value of being able to join a table on
itself.... it just seems as though users stumble across this more
often than they join a table with itself. -sc

--
Sean Chittenden

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Stephan Szabo 2003-09-22 21:02:03 Re: Table alias fun == incorrectly adding tables to join...
Previous Message Rod Taylor 2003-09-22 20:12:55 Re: Table alias fun == incorrectly adding tables to join...