Re: Funcion inet2int - error

From: Rubén da Silva <ruben(at)ozonomultimedia(dot)com>
To:
Cc: postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Funcion inet2int - error
Date: 2006-12-01 19:29:31
Message-ID: 4570829B.4070102@ozonomultimedia.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

>>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.
>

Los datos me los han dado así, por mi los almacenaría en inet que es lo
más lógico. La conversión me temo que puede ser mortal, son 3 millones *
2 columnas = 6 millones de conversiones. Meter los datos con inserts me
llevaba varias horas, al final opté por COPY de un CSV y aún así le
llevó sus 10-15 minutos, ¿debería llevar poco (no horas) la conversión
si se trata de updates? (los metería en columnas de la misma tabla)

>
>>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?

CREATE TABLE blocks
(
ipnum_start int8 NOT NULL,
ipnum_end int8 NOT NULL,
loc_id int4 NOT NULL,
CONSTRAINT blocks_pkey PRIMARY KEY (loc_id, ipnum_start, ipnum_end)
)
WITHOUT OIDS;

CREATE UNIQUE INDEX idx_block
ON blocks
USING btree
(ipnum_start, ipnum_end, loc_id);

++++++++++

Estoy usando Postgres 8.1 en WinXP en un P4 1.7GHz 1GB RAM

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-12-01 20:05:25 Re: Funcion inet2int - error
Previous Message Alvaro Herrera 2006-12-01 19:16:28 Re: Funcion inet2int - error