[HACKERS] About bug #6049

2011-06-03 Thread Tom Lane
I looked into $SUBJECT, which complains about this:

CREATE VIEW test_view AS VALUES (1), (2), (3) ORDER BY 1;

This dumps like so:

regression=# \d+ test_view
View public.test_view
 Column  |  Type   | Modifiers | Storage | Description 
-+-+---+-+-
 column1 | integer |   | plain   | 
View definition:
 VALUES (1), (2), (3)
  ORDER BY *VALUES*.column1;

which is problematic because it'll fail during dump/restore, because
you can't write it that way:

regression=# VALUES (1), (2), (3) ORDER BY *VALUES*.column1;
ERROR:  invalid reference to FROM-clause entry for table *VALUES*
LINE 1: VALUES (1), (2), (3) ORDER BY *VALUES*.column1;
  ^
HINT:  There is an entry for table *VALUES*, but it cannot be referenced from 
this part of the query.

The HINT gives a hint what's going on: we make an RTE for the VALUES
clause, and then we have to give it an alias, for which we use 
*VALUES*.  But the code is trying to hide the existence of that
nonstandard alias by not exposing it in the parser's p_relnamespace
list.  So you can write column1 to refer to the first result column
of the VALUES, but not *VALUES*.column1.

On reflection this looks pretty stupid --- column1 is just as
nonstandard an alias, but we're allowing that to be used explicitly,
so why not the made-up table alias as well?

But anyway, there are basically two things we could do here: either
allow the table alias to be referenced, or try to teach ruleutils.c
not to qualify the column reference.  The second looks pretty tricky
and maybe not future-proof, so I'm leaning to the first.  Comments?

regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] About bug #6049

2011-06-03 Thread Robert Haas
On Fri, Jun 3, 2011 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:
 I looked into $SUBJECT, which complains about this:

 CREATE VIEW test_view AS VALUES (1), (2), (3) ORDER BY 1;

 This dumps like so:

 regression=# \d+ test_view
                View public.test_view
  Column  |  Type   | Modifiers | Storage | Description
 -+-+---+-+-
  column1 | integer |           | plain   |
 View definition:
  VALUES (1), (2), (3)
  ORDER BY *VALUES*.column1;

 which is problematic because it'll fail during dump/restore, because
 you can't write it that way:

 regression=# VALUES (1), (2), (3) ORDER BY *VALUES*.column1;
 ERROR:  invalid reference to FROM-clause entry for table *VALUES*
 LINE 1: VALUES (1), (2), (3) ORDER BY *VALUES*.column1;
                                      ^
 HINT:  There is an entry for table *VALUES*, but it cannot be referenced 
 from this part of the query.

 The HINT gives a hint what's going on: we make an RTE for the VALUES
 clause, and then we have to give it an alias, for which we use
 *VALUES*.  But the code is trying to hide the existence of that
 nonstandard alias by not exposing it in the parser's p_relnamespace
 list.  So you can write column1 to refer to the first result column
 of the VALUES, but not *VALUES*.column1.

 On reflection this looks pretty stupid --- column1 is just as
 nonstandard an alias, but we're allowing that to be used explicitly,
 so why not the made-up table alias as well?

 But anyway, there are basically two things we could do here: either
 allow the table alias to be referenced, or try to teach ruleutils.c
 not to qualify the column reference.  The second looks pretty tricky
 and maybe not future-proof, so I'm leaning to the first.  Comments?

I think that makes sense, although it would less totally arbitrary if
the alias were just values rather than *VALUES*.  The asterisks
suggest that the identifier is fake.  But it's probably too late to do
anything about that.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] About bug #6049

2011-06-03 Thread Tom Lane
Robert Haas robertmh...@gmail.com writes:
 On Fri, Jun 3, 2011 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:
 But anyway, there are basically two things we could do here: either
 allow the table alias to be referenced, or try to teach ruleutils.c
 not to qualify the column reference.  The second looks pretty tricky
 and maybe not future-proof, so I'm leaning to the first.  Comments?

 I think that makes sense, although it would less totally arbitrary if
 the alias were just values rather than *VALUES*.  The asterisks
 suggest that the identifier is fake.  But it's probably too late to do
 anything about that.

Hmm.  Right now, since the identifier can't be referenced explicitly,
you could argue that a change might be painless.  But if what we're
trying to accomplish is to allow existing view definitions of this form
to be dumped and restored, that wouldn't work.  I'm inclined to leave
it alone.

regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] About bug #6049

2011-06-03 Thread Robert Haas
On Fri, Jun 3, 2011 at 12:13 PM, Tom Lane t...@sss.pgh.pa.us wrote:
 Robert Haas robertmh...@gmail.com writes:
 On Fri, Jun 3, 2011 at 11:25 AM, Tom Lane t...@sss.pgh.pa.us wrote:
 But anyway, there are basically two things we could do here: either
 allow the table alias to be referenced, or try to teach ruleutils.c
 not to qualify the column reference.  The second looks pretty tricky
 and maybe not future-proof, so I'm leaning to the first.  Comments?

 I think that makes sense, although it would less totally arbitrary if
 the alias were just values rather than *VALUES*.  The asterisks
 suggest that the identifier is fake.  But it's probably too late to do
 anything about that.

 Hmm.  Right now, since the identifier can't be referenced explicitly,
 you could argue that a change might be painless.  But if what we're
 trying to accomplish is to allow existing view definitions of this form
 to be dumped and restored, that wouldn't work.  I'm inclined to leave
 it alone.

Yep.  I think we're stuck with it at this point.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers