martes, 28 de octubre de 2008

BLOQUEOS DE SEQUENCIA

como bloquear sequencias

DECLARE
id INTEGER ;
oidseq integer;

BEGIN

select c.oid::integer
into oidseq
from pg_class c
where relname = secuencia;

perform pg_advisory_lock(oidseq);

select into id nextval(secuencia);

execute 'ALTER SEQUENCE ' || secuencia || ' RESTART ' || (id + cantidad)::text;

perform pg_advisory_unlock(oidseq);

return id;
end;


Nota:
* Tiene que estar creado el lenguage plpgsql: create language plpgsql
* Tener en cuenta que el usuario que largue la funcion almacenada tiene que ser ownere de la sequencia
* Probar procedimiento: select get_rango_id_tabla('"boleta_id_seq"',1);

------------------------------------------------------------------
referencia:
http://www.depesz.com/index.php/2008/03/20/getting-multiple-values-from-sequences/

------------------------------------------------------------------

No hay comentarios: