Ayuda con Trigger

From: "Miguel Angel (dot)" <rev_angel(at)hotmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Ayuda con Trigger
Date: 2007-03-15 17:14:58
Message-ID: BAY131-F32EEC253B629BEF769819090720@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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/

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jenaro Centeno Gomez 2007-03-15 17:18:27 Re: OT: OK, pero que lenguajes entonces ... ? ( Simbolos dentro de ca denas )
Previous Message Pere Rodríguez 2007-03-15 17:04:58 Re: Postgres como linked server en Ms. SQL server 2005