Sam Mason <[EMAIL PROTECTED]> writes:
> You just want an extra set of brackets; i.e.:

>   CREATE INDEX token_position_func ON token ((position+1));

> Should do the trick.  Not entirely sure why, but it'll probably have
> something to do with avoiding ambiguity in the grammar.

Right.  The problem is the Berkeley-era decision to put index opclasses
into the syntax without any keyword or punctuation, viz

        create index ... on table (column_name [ opclass_name ]);

So something like

        CREATE INDEX token_position_func ON token (a + b);

is ambiguous: is the + an infix operator, or is it a postfix operator
and the "b" is to be taken as an opclass name?

We hacked around that by requiring parens around expressions.  For
backwards compatibility with other Berkeley-era syntax, there's
a special exception that you can omit the parens when the expression is
just a function call.

                        regards, tom lane

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

Reply via email to