From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Rubén da Silva <ruben(at)ozonomultimedia(dot)com> |
Cc: | postgresql <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Funcion inet2int - error |
Date: | 2006-12-01 19:16:28 |
Message-ID: | 20061201191628.GC3036@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Rubén da Silva escribió:
> Alvaro Herrera wrote:
> >Rubén da Silva escribió:
> >
> >>He creado una función para pasar de inet a entero largo (int8):
> >>
> >>==============
> >>
> >>CREATE OR REPLACE FUNCTION inet2int(inet "varchar")
> >> RETURNS information_schema.cardinal_number AS
> >
> >
> >Declarala como RETURNS int8. cardinal_number es un dominio sobre el
> >tipo int4.
> >
>
> OK. Perfecto. Gracias.
>
> Ahora que esto está solucionado, veo cuando la uso (con EXPLAIN ANALYZE)
> que usa un "seq scan" en lugar de un "index scan".
>
> Para ponernos en situación:
>
> Imaginemos que tengo rangos de ips almacenados en una tabla como enteros
> (int8) start y end.
>
> Tengo un index de estas columnas de enteros.
Mala idea -- podrias almacenar las IPs usando el tipo "inet". Hay
operadores para > y < para ese tipo que te facilitarian estas busquedas.
> SELECT id, blocks.ipnum_start, blocks.ipnum_end FROM blocks
> WHERE inet2int('unaIP') > blocks.ipnum_start AND inet2int('unaIP') <
> blocks.ipnum_end;
Cual es la definicion de la tabla, y que version de Postgres estas
usando?
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
From | Date | Subject | |
---|---|---|---|
Next Message | Rubén da Silva | 2006-12-01 19:29:31 | Re: Funcion inet2int - error |
Previous Message | Alvaro Herrera | 2006-12-01 19:06:39 | Re: Configuracion optima para servidor postgres |