From: | Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Cc: | 'Lista Ayuda Pgsql' <pgsql-es-ayuda(at)postgresql(dot)org>, Fernando Hevia <fhevia(at)ip-tel(dot)com(dot)ar> |
Subject: | Re: RE: [pgsql-es-ayuda]=?ISO-8859-1?Q?_Identificador_=FAni?=co con md5() |
Date: | 2010-02-25 13:15:41 |
Message-ID: | 20100225123403.M71121@fcm.unc.edu.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Wed, 24 Feb 2010 23:23:01 -0300, Alvaro Herrera wrote
> Sebastián Villalba escribió:
> > Efectivamente necesito algo así, que no siga patrón correlativo o determinado.
> > El único requisito es que la longitud debe ser de 7. Por un antojo el
> > "substring(md5(CURRENT_TIME::time)from 7 for 7)" lo hago a partir de la
> > séptima posición, porque se me ocurrió hacerlo así, pero sin contar con ningún
> > fundamento teórico.
>
> Supongo que lo que puedes hacer si te interesa asegurar unicidad es
> convertir el número de la función de Verite en un string de 7
> caracteres. Claro que tendrías que modificarla, porque con una
> cadena de largo 7 en hex tienes a lo más 268.435.456 cadenas
> distintas (16^7), pero la función de Verite retorna 2^32 valores
> distintos (4 mil millones y fracción)
>
> Lo otro que podrías hacer es usar 24 dígitos en vez de 16, con lo que
> tienes espacio para 4500 millones de valores; cubrirías todo el espacio
> de Verite y un poco más. Ahí el único trabajo que tendrías sería
> inventar cómo mapear un número de 32 bits a un string ...
Bueno, yo tengo en un sistemita algo similar, pero que si sigue un orden
correlativo. Necesitaba un código único, alfanumérico de 6 dígitos.
Lo que hago es codificar un campo serial (para garantizar unicidad) en base 36
(utilizando todas las letras utilizables del alfabeto) con lo que tengo 6^36
(un número muy grande).
Un par de ejemplos de la salida:
seba=# SELECT * FROM generar_codigo();
generar_codigo
----------------
0076A4
(1 fila)
seba=# SELECT * FROM generar_codigo();
generar_codigo
----------------
0076A5
(1 fila)
Por si a alguien le sirve, adjunto el código. Son 2 funciones en plpgsql. Saludos!
-
-------------------------------------------
Sebastián Villalba
A. Gestión Informática
Facultad de Cs. Médicas
U.N.C. - Argentina
-------------------------------------------
Attachment | Content-Type | Size |
---|---|---|
codigos.txt | text/plain | 2.2 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | coconauta | 2010-02-25 15:23:44 | Re: problema arranque postgres y programa java |
Previous Message | Silvio Quadri | 2010-02-25 10:10:45 | Re: problema arranque postgres y programa java |