Re: Ayuda con Trigger

From: Jose Carlos Chevarria Mansilla <jchevarria(at)yarkan(dot)com(dot)pe>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda con Trigger
Date: 2007-03-15 19:19:12
Message-ID: 45F99C30.1050706@yarkan.com.pe
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Redundancia ciclica. Estas volviendo a insertar un registro en la misma
> tabla por lo tanto se vuelve a disparar el trigger.

Miguel Angel . escribió:
> Qué tal.
>
> Tengo una tabla en donde se guardan los registros de nuevos usuarios
> en un sistema, cada vez que el sistema los crea los pone por default
> en el grupo 1; ahora se quiere que sea un disparador el que en
> automático detecte que cuando haya un usuario solamente en este grupo
> sea puesto en el grupo 6.
> El trigger me funciona bien. Pero mi problema es que al ingresar el
> nuevo usuario en el grupo 1 el trigger se ejecuta más de una vez y no
> entiendo por que; aunque si hace su trabajo bien.
> Este es el log:
>
> ---------------------------
> INSERT INTO jforum_user_groups VALUES(1,10);
>
> NOTICE: Inicia Decision
> NOTICE: Decision Positiva
> NOTICE: Inicia Decision
> CONTEXT: SQL statement "INSERT INTO jforum_user_groups VALUES(6, $1 )"
> PL/pgSQL function "default_group" line 8 at SQL statement
> NOTICE: Fin Decision
> CONTEXT: SQL statement "INSERT INTO jforum_user_groups VALUES(6, $1 )"
> PL/pgSQL function "default_group" line 8 at SQL statement
> NOTICE: Fin Decision
>
> Query returned successfully: 1 rows affected, 32 ms execution time.
> ---------------------------
>
> Según este log, el trigger se esta ejecutando 3 veces; pero no
> entiendo por que; aquí mi trigger:
>
> ---------------------------
> CREATE OR REPLACE FUNCTION default_group() RETURNS TRIGGER AS $$
> BEGIN
> --Reglas
> -- Si el usuario pertenece a más de un grupo no hacer nada
> -- Si el usuario pertenece al grupo 1 solamente agregarlo en
> automático al grupo 6
> RAISE NOTICE 'Inicia Decision';
> IF (NEW.user_id IN (SELECT user_id FROM jforum_user_groups WHERE
> user_id IN (SELECT j2.user_id FROM jforum_user_groups j1,
> jforum_user_groups j2 WHERE j1.group_id=1 /*Grupo 1*/ AND
> j2.user_id=j1.user_id GROUP BY j2.user_id HAVING
> COUNT(j2.group_id)<2)) ) THEN
> RAISE NOTICE 'Decision Positiva';
> INSERT INTO jforum_user_groups VALUES(6,NEW.user_id);
> END IF;
> RAISE NOTICE 'Fin Decision';
> RETURN NEW;
> END;
> $$ LANGUAGE 'plpgsql' VOLATILE;
>
> CREATE TRIGGER default_group AFTER INSERT ON jforum_user_groups FOR
> EACH ROW EXECUTE PROCEDURE default_group();
> ---------------------------
>
>
> Uso el postgresql 8.1, gracias de antemano por la ayuda.
>
> _________________________________________________________________
> ¿Estás pensando en cambiar de coche? Todas los modelos de serie y
> extras en MSN Motor. http://motor.msn.es/researchcentre/
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 5: ¿Has leído nuestro extenso FAQ?
>
> http://www.postgresql.org/files/documentation/faqs/FAQ.html
>
> __________ Información de NOD32, revisión 2105 (20070309) __________
>
> Este mensaje ha sido analizado con NOD32 antivirus system
> http://www.nod32.com
>
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Colina 2007-03-15 19:59:15 Re: Re[2]: Sobre pagina de consultas y documentacion.
Previous Message Luis Rodrigo Gallardo Cruz 2007-03-15 19:05:04 Re: OT reOT [ERA:Re: Simbolos dentro de cadenas]