--- On Thu, 10/8/09, Gorka <gorkapostg...@yahoo.es> wrote: From: Gorka <gorkapostg...@yahoo.es> Subject: RE: [pgsql-es-ayuda] Crear claves aleatorias To: "'POSTGRES'" <pgsql-es-ayuda@postgresql.org> Date: Thursday, October 8, 2009, 3:07 PM
>-----Mensaje original----- >De: pgsql-es-ayuda-ow...@postgresql.org [mailto:pgsql-es-ayuda- >ow...@postgresql.org] En nombre de Rafael Martinez >Enviado el: jueves, 08 de octubre de 2009 16:03 >Para: Gorka >CC: POSTGRES >Asunto: Re: [pgsql-es-ayuda] Crear claves aleatorias > >-----BEGIN PGP SIGNED MESSAGE----- >Hash: SHA1 > >Gorka wrote: >> ¿Hay alguna manera en postgres de crear una función que genere >passwords >> aleatorias? >> > >Hola > >Te mando esta funcion que puedes utilizar para generar claves >aleatorias. El parametro aleatorio lo define la funcion random(). > >- ---------------------------------------------------------------------- >-- >CREATE OR REPLACE FUNCTION generate_password(integer) RETURNS TEXT AS $$ >DECLARE > len ALIAS FOR $1; > cnt INTEGER; > password TEXT :=''; > > characters_not_included TEXT := E''',-./:;<>@^_`\\'; > BEGIN > > FOR cnt IN 1..len LOOP > password := password || chr(round((random()*87)+35)::integer); > END LOOP; > > password := >translate(password,characters_not_included,substr(md5(random()::text),ro >und((random()*(32- >char_length(characters_not_included))))::integer,char_length(characters_ >not_included))); > >RETURN password; > >END; >$$ LANGUAGE plpgsql; >- ---------------------------------------------------------------------- >-- > >Ejemplo: > >SELECT generate_password(8); > generate_password >- ------------------- > r58R1N=Z >(1 row) > Hola. Parece un poco más aleatoria que la función anterior, ya que combina algunos caracteres (además de letras y dígitos). Al ejecutar la query en la ventana SQL del Pgadmin III me da el siguiente error: ERROR: no existe el lenguaje «plpgsql» Estado SQL:42704 Sugerencias:Usar CREATE LANGUAGE para instalar el lenguaje en la base de datos. ¿No es plpgsql el lenguaje en sí que utiliza postgres? ¿Qué tengo que poner "CREATE LANGUAGE plpgsql;"? ¿Esto no afectará a la base de datos, verdad? Es que me da un poco de miedo porque está en producción. -- TIP 5: ¿Has leído nuestro extenso FAQ? http://www.postgresql.org/docs/faqs.FAQ.html Si plpgsql es el lenguaje procedimental de postgresql No te va a afectar en forma negativa la base de datos ejecuta "create language plpgsql" para que poder ejecutar tu funcion