underscore split to alias

Started by Erik Rijkersover 15 years ago2 messages
#1Erik Rijkers
er@xs4all.nl

I am not sure this is a bug, but I was surprised by the following behaviour
in HEAD and 8.4.4 (instances built today, 2010.05.14):

Invalid (?) values like 123_456 are split before the underscore and interpreted as
123 as "456":

$ psql -p 6591 -d testdb -c "select 123_456, current_setting('server_version')"
_456 | current_setting
------+-----------------
123 | 9.0beta1
(1 row)

$ psql -p 6584 -d testdb -c "select 123_456, current_setting('server_version')"
_456 | current_setting
------+-----------------
123 | 8.4.4
(1 row)

Older versions (8.3 thru 7.4) all give an error:

$ psql -p 6583 -d testdb -c "select 123_456, current_setting('server_version')"
ERROR: syntax error at or near "_456"
LINE 1: select 123_456, current_setting('server_version')
^

The error given by the older servers seems justified. I assume
this is a bug and not a deliberate change?

thanks,

Erik Rijkers

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Erik Rijkers (#1)
Re: underscore split to alias

"Erik Rijkers" <er@xs4all.nl> writes:

I am not sure this is a bug, but I was surprised by the following behaviour
in HEAD and 8.4.4 (instances built today, 2010.05.14):

Invalid (?) values like 123_456 are split before the underscore and interpreted as
123 as "456":

All versions of postgres will parse 123_456 as an integer (123)
immediately followed by an identifier (_456). In the particular context
that this is all of a top-level SELECT item, the SQL spec requires that
we parse this as an integer and a column alias (with an implied AS).
We failed to do that before 8.4, but now honor the spec requirement
that AS can be omitted. Personally I think that's one of the stupider,
more error-prone aspects of the spec's syntax, but nonetheless it's
required by spec ....

regards, tom lane