Puedes resolverlo con un "tigre", es la solución que dan los motores de bd 
sobre estos casos. Como cosa rara, aqui un ejemplo hecho y probado por mi:

create or replace function fn_datoslimitados() returns trigger as $$
declare
    conteousu numeric;
begin
    select count(*) into conteousu from public.grupos_usuarios ug where 
ug.codgrupo = new.codgrupo;
    if conteousu >= 10 then 
        raise 'Datos suficientes';
    end if;    
    RETURN new;
end;
$$
language plpgsql;

drop TRIGGER trg_nroreg ON public.grupos_usuarios ;

CREATE TRIGGER trg_nroreg AFTER INSERT or UPDATE
ON public.grupos_usuarios FOR EACH row
EXECUTE PROCEDURE fn_datoslimitados ();




________________________________
De: Silvio Bravo Cadó <bravoc...@gmail.com>
Para: postgre sql <pgsql-es-ayuda@postgresql.org>
Enviado: lunes 10 de octubre de 2011 11:45
Asunto: [pgsql-es-ayuda] Bloqueo de tablas o transacciones


Saludos lista, nuevamente molestandolos con lo siguiente: estamos desarrollando 
un sistema escolar en el que permitimos la inscripcion de alumnos a un grupo en 
especifico, pero se da el caso que el grupo tien un cupo limitado por ejemplo, 
solo permite 20 o 30 alumnos por grupo, por lo que se requiere evitar que un 
grupo se cargue con mas alumnos del que debe. Cabe mencionar que el sistema es 
web y que los alumnos se inscriben a traves del sistema por lo que habra 
concurrencia de conexion  a la db posiblemente intentanto inscribirse al mismo 
grupo y se tiene que evitar que el grupo se sobre sature. Para resolver esto se 
me ocurrio utilizar lock tables con el fin de bloquear la tabla de inscripcion 
para evitar que un grupo se llene con mas de lo debido, pero no se si es la 
mejor forma de resolverlo, ya que imagino tendre problemas de latencia por el 
caso de que muchos usuarios quieran inscribirse y esten bloqueados hasta que se 
valla desbloqueando la
 tabla, la verdad no he hecho antes nada con lock table y quisiera saber si 
alguien ya ha resuelto algun caso parecido o el mismo.

De antemano muchas gracias.

Un saludo.
 

-- 



Ing. Silvio Bravo Cadó
Desarrollo de Software
Tlaltek S.A de C.V
(229) 9 2 1 1 3 2 6 ext. 102.
Veracruz, México.

Responder a