Re: indices sobre datos binarios

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Mª José Sempere <mjose(at)pixelart(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: indices sobre datos binarios
Date: 2004-12-07 18:57:43
Message-ID: 20041207185743.GB6136@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Dec 07, 2004 at 04:48:57PM +0100, Mª José Sempere wrote:

Hola,

Por favor incluye siempre una copia a la lista al momento de responder.

> Hemos intentado crear un índice sobre la función md5() del campo de tipo
> bytea, con la instrucción:
>
> create unique index indice_unico on probabytea3 (md5(binarios));
>
> donde probabytea3 es el nombre de la tabla y binarios del nombre del campo
> de tipo bytea, pero obtenemos el siguiente error:
>
> ERROR: function md5(bytea) does not exist

Ok, no existe la funcion md5(bytea). Una idea mas concreta puede ser
instalar el modulo pgcrypto de contrib, y luego usar la funcion
digest().

create unique index indice_unico on prueba (digest(binarios, 'md5'));

(Para instalar un modulo contrib, una posibilidad, si estas en un Linux
con RPMs o Debian, es instalar el paquete postgresql-contrib; otra es
tomar el codigo fuente de Postgres, cd contrib/pgcrypto y leer
README.pgcrypto)

> Por otro lado,aparte de la función md5(), hace usted referencia a la función
> sha1(), pero dicha función no nos aparece documentada en la ayuda.

En este caso, el indice seria sobre
create unique index indice_unico on prueba (digest(binarios, 'sha1'));

Observa que en caso de usar esta idea para asegurar unicidad, lo
interesante es que la combinacion de ambos digest sea unica, no que cada
uno por si solo sea unico. Es decir, el indice util seria

create unique index indice_unico on prueba
(digest(binarios, 'md5'), digest(binarios, 'sha1'));

(Es un asunto de jugar a las probabilidades, si usar uno solo de los
digest o ambos. En IRC alguien me dijo que usaban la combinacion
md5-sha1-tamaño.

> Tambien estamos interesados en saber porqué dice usted que si los datos
> pueden ser arbitrariamente grandes, probablemente no funcionará el índice
> único sobre el campo de tipo bytea.

Porque en un indice solo pueden almacenarse llaves de hasta 1/3 del
tamaño de pagina (8kB en un Postgres comun y corriente), es decir, algo
mas de 2kB.

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"La principal característica humana es la tontería"
(Augusto Monterroso)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Pablo Marrero 2004-12-07 19:34:03 Vacuum no responde??
Previous Message eduardo cifuentes 2004-12-07 16:44:48 Querys