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/
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 |