From: | mmiranda(at)americatel(dot)com(dot)sv |
---|---|
To: | alvherre(at)dcc(dot)uchile(dot)cl, mmiranda(at)americatel(dot)com(dot)sv |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | RE: rutina para genear pines |
Date: | 2005-05-10 14:32:29 |
Message-ID: | 76E0DAA32C39D711B6EC0002B364A6FA044EBBE3@amsal01exc01.americatel.com.sv |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Alvaro Herrera wrote:
> No te creo que usara toda la CPU; aca se demora 0% de CPU en decir que
> la funcion no es valida.
>
Ok, se me fue el ultimo end loop, lo acepto (o no es por eso que es
invalida?), lo que pasa es que debo guardar en un record los pines generados
para devolverlos a la pagina web que corre el SP, pero igual, si la tabla
tiene varios miles de registros (y yo espero tener millones ahi), la funcion
se tarda varios minutos y consume mucho cpu, aun con el indice, veamos tu
sugerencia
:)
> create unique index pin_pines on pines (pin);
No seria mejor hacer esto con una PK?
>
> create or replace function crea_10_pines(int) returns void language
> plpgsql volatile as $$
> declare
> total int := 0;
> posibles text := '1234567890';
> nuevo_pin text;
> offset int;
> y int;
> largo alias for $1;
> begin
> LOOP
> nuevo_pin := '';
> FOR y IN 1 .. largo LOOP
> offset := ceil(random()*length(posibles));
> nuevo_pin := nuevo_pin || substr(posibles, offset, 1);
> END LOOP;
>
> BEGIN
> INSERT INTO pines (pin) VALUES (nuevo_pin);
> total := total + 1;
> EXCEPTION WHEN others THEN
> raise notice 'duplicado %', nuevo_pin;
> END;
> IF (total >= 10) THEN
> RETURN;
> END IF;
> END LOOP;
> end;
> $$;
Lo demas me parece perfecto, lo pruebo y les comento que tal sale, como
siempre, consultar la lista es de grandisima ayuda,
Gracias Alvaro.
---
Miguel
From | Date | Subject | |
---|---|---|---|
Next Message | Mario Gonzalez | 2005-05-10 14:51:20 | Re: Programar un borrado de datos |
Previous Message | Alicia Mc Millan Barrera | 2005-05-10 13:21:32 | Funciones Postgres |