Re: Functional index adding one

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Sam Mason <sam(at)samason(dot)me(dot)uk>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Functional index adding one
Date: 2008-07-03 15:11:26
Message-ID: 2693.1215097886@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Sam Mason <sam(at)samason(dot)me(dot)uk> 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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Csaba Nagy 2008-07-03 15:22:47 Re: Switching between terminals
Previous Message Gregory Stark 2008-07-03 15:09:23 Re: Switching between terminals