[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)