RE: rutina para genear pines

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

Browse pgsql-es-ayuda by date

  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