non-integer constant in ORDER BY: why exactly, and documentation? - Mailing list pgsql-general

From Ken Tanzer
Subject non-integer constant in ORDER BY: why exactly, and documentation?
Date
Msg-id CAD3a31V7CETbYZxMpsCXxMewC10R0H2QSf_5Qv00nJ8EOSuLqA@mail.gmail.com
Whole thread Raw
Responses Re: non-integer constant in ORDER BY: why exactly, and documentation?  ("David Johnston" <polobo@yahoo.com>)
Re: non-integer constant in ORDER BY: why exactly, and documentation?  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: non-integer constant in ORDER BY: why exactly, and documentation?  ("A.M." <agentm@themactionfaction.com>)
List pgsql-general
Hi.  I recently ran a query that generate the same error as this:

SELECT * FROM generate_series(1,10) ORDER BY 'foo';
ERROR:  non-integer constant in ORDER BY
LINE 1: SELECT * FROM generate_series(1,10) ORDER BY 'foo';

The query was generated by an app (and the result somewhat inadvertent), so it was easy enough to change and I'm not asking here about a practical problem.

I am curious though about why this "limitation" exists.  I get that integer constants are reserved for sorting by column numbers.  But if Postgres already knows that it's a non-integer constant,  why not let it go through with the (admittedly pointless) ordering?

Also, I couldn't see that this was explictly mentioned in the documentation.  The relevant pieces seemed to be:

Each expression can be the name or ordinal number of an output column (SELECT list item), or it can be an arbitrary expression formed from input-column values.

followed closely by:
It is also possible to use arbitrary expressions in the ORDER BY clause, including columns that do not appear in the SELECT output list.
(http://www.postgresql.org/docs/9.1/static/sql-select.html#SQL-ORDERBY)

And looking at the expressions page (http://www.postgresql.org/docs/8.4/static/sql-expressions.html), the first type of value expression is a "constant or literal expression."  So nothing seems to explicitly rule out a literal ORDER BY.

I'm not sure if it would do violence to something I'm missing, but would the following combined statement work for the documentation?

"Each expression can be the name or ordinal number of an output column (SELECT list item), or it can be an arbitrary expression.   The expression can include column values--whether they appear in the SELECT output list or not.  An expression may not, however, consist solely of a non-integer constant. And an integer constant will be interpreted as the ordinal number of an output column "

Thanks in advance.

Ken




--

AGENCY Software  
A data system that puts you in control
(253) 245-3801


pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: Disabling inferred "group by" columns in 9.1?
Next
From: "David Johnston"
Date:
Subject: Re: non-integer constant in ORDER BY: why exactly, and documentation?