[Pgsql-ayuda] Indices ...

Alvaro Herrera alvherre@dcc.uchile.cl
Wed, 10 Sep 2003 19:09:09 -0400


On Wed, Sep 10, 2003 at 05:13:50PM -0300, Martin Marques wrote:
> El Mié 10 Sep 2003 16:34, Carmen Gloria Sepulveda Dedes escribió:

> > Si yo tengo una tabla con un campo
> > de tipo timestamp y lo consulto usando
> > las funciones date_part o date_trunc y tambien
> > uso estas funciones en el where ...
> 
> Tenes que crear un indice de funcion:
> 
> CREATE INDEX nombre_idx ON nombre_tabla (date_part(nombre_col))

Ojo... los indices funcionales hasta 7.3 (inclusive) no pueden llevar
constantes en la definicion.  O sea esto no es valido:

CREATE INDEX nombre_idx ON nombre_tabla (date_part(nombre_col, 'month'))

Para poder hacer esto, tienes que crear una funcion del estilo

CREATE FUNCTION date_part_month (timestamp) returns double AS '
select date_part($1, ''month'')' LANGUAGE SQL;

y crear un indice usando esa funcion (declarada inmutable y todo eso,
por supuesto).

Esto fue corregido por Tom Lane para 7.4, disponible en forma de beta en
su mirror más cercano.

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"I can't go to a restaurant and order food because I keep looking at the
fonts on the menu.  Five minutes later I realize that it's also talking
about food" (Donald Knuth)