El día 25 de febrero de 2010 10:15, Sebastián Villalba <sebast...@fcm.unc.edu.ar> escribió: > 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! >
Y no te convendría utilizar UUID para la unicidad? postgres=# select uuid_generate_v1()::Text from generate_Series(1,10); uuid_generate_v1 -------------------------------------- 8f5d1cb0-2225-11df-ade2-00248cde5fee 8f5d1e90-2225-11df-94d5-00248cde5fee 8f5d1fc6-2225-11df-af75-00248cde5fee 8f5d20f2-2225-11df-9334-00248cde5fee 8f5d2214-2225-11df-ac0b-00248cde5fee 8f5d237c-2225-11df-8e70-00248cde5fee 8f5d24a8-2225-11df-a715-00248cde5fee 8f5d25ca-2225-11df-bbb1-00248cde5fee 8f5d26f6-2225-11df-9d32-00248cde5fee 8f5d285e-2225-11df-8a44-00248cde5fee -- Emanuel Calvo Franco DBA at: www.siu.edu.ar www.emanuelcalvofranco.com.ar Join: http://www.thevenusproject.com/ -- TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podr� leerlo