Ignacio Balcarce escribió:

> BEGIN   
>                 IF (SELECT max(seq_id) FROM thuban_seq
>                     WHERE seq_id LIKE (to_char(now() + '1 day'::interval,
> 'YYYYMMDD') || '%')) IS NOT NULL
> 
>                                THEN 
>                                                SELECT max(seq_id) INTO
> item_id
>                                                FROM thuban_seq
>                                                WHERE seq_id LIKE
> (to_char(now() + '1 day'::interval, 'YYYYMMDD') || '%');
>                                                
>                                                id := substr(item_id, 9,
> length(item_id)-9)::INT8;
> 
>                 ELSE 
>                                                id:= 00000000;
>                 END IF;
>   
>    INSERT INTO thuban_seq(seq_id) VALUES (to_char(now(),'YYYYMMDD') ||
> (id+1)) RETURNING seq_id INTO item_id;


Espero que tengas algún lock externamente a la ejecución de esta
función, porque así como está es sujeto de condiciones de carrera.

-- 
Alvaro Herrera                 http://www.amazon.com/gp/registry/DXLWNGRJD34J
"I'm always right, but sometimes I'm more right than other times."
                                                  (Linus Torvalds)
--
TIP 4: No hagas 'kill -9' a postmaster

Responder a