Re: [GENERAL] Indice en Date

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Arturo <arturomunive(at)gmail(dot)com>
Cc: Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [GENERAL] Indice en Date
Date: 2007-05-02 01:25:36
Message-ID: 20070502012536.GH5867@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda pgsql-general

Arturo escribió:
> Alvaro Herrera escribió:
> >Arturo escribió:
> >
> >
> >>ahhhh eso es obvio... de todas formas mi duda era saber por que cuando
> >>ponia
> >>WHERE
> >>fecha < '11-Jan-2007'::date
> >>
> >>no usaba el indice
> >>
> >>y cuando ponia
> >>WHERE
> >>fecha::date < '11-Jan-2007'::date
> >>
> >>si lo hacía
> >>
> >>en ambos casos con igual numero de filas
> >>
> >
> >Es "fecha" una columna de tipo date, o es de otro tipo?
> >
> >
> si la columna es date asi esta declarada por me sorprendo por lo del indice

Por favor muestra tambien un \d de la tabla, que incluya todos los
indices que hay en ella.

Algo que puede estar pasando es que la columna de la izquierda sea
automaticamente cambiada de tipo por un cast implicito, y que se
seleccione un operador distinto. Por ej. que este haciendo
implicitamente esto:

WHERE
fecha::timestamp with time zone < '11-Jan-2007'::date

Creo que puede hacerlo porque existe un cast marcado "implicito" que
convierte date en timestamp with time zone, y ademas existe un operador
<(timestamp with time zone, date)

No acaba de quedarme claro _por que_ lo haria; quizas el indice tiene
alguna peculiaridad.

alvherre=# select format_type(castsource, -1), format_type(casttarget, -1), castcontext from pg_cast where castsource = 'date'::regtype;
format_type | format_type | castcontext
-------------+-----------------------------+-------------
date | timestamp without time zone | i
date | timestamp with time zone | i
date | text | i
date | character varying | a
date | bpchar | a
(5 rows)

alvherre=# select format_type(oprleft, -1), format_type(oprright, -1) from pg_operator where oprname = '<' and (oprleft='date'::regtype or oprright = 'date'::regtype);
format_type | format_type
-----------------------------+-----------------------------
date | date
date | timestamp without time zone
date | timestamp with time zone
timestamp without time zone | date
timestamp with time zone | date
(5 rows)

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Patricia Lopez Ravenau 2007-05-02 12:52:09 Re: mapa de base de datos
Previous Message Alvaro Herrera 2007-05-02 01:13:50 Re: [GENERAL] Indice en Date

Browse pgsql-general by date

  From Date Subject
Next Message Greg Smith 2007-05-02 01:52:16 Re: Feature Request --- was: PostgreSQL Performance Tuning
Previous Message Alvaro Herrera 2007-05-02 01:13:50 Re: [GENERAL] Indice en Date