buenas tardes, quisiera ver como me pueden ayudar con un error en una 
funcion .... 
tengo varias tablas que heredan de una con la misma estructura todas y 
tengo una funcion que trigger que se dispara cuando se va a insertar en 
la tabla madre 'user' donde pregunto que rol es el del user y en caso de 
ser uno de los roles que participan en el proceso de publicacion 
entonces se inserta en la tabla hija correspondiente al rol, de lo 
contrario se inserta en la tabla madre. 
este es el codigo de la function: 

CREATE OR REPLACE FUNCTION security.rol_insert() 
RETURNS trigger AS 
$BODY$ 
DECLARE 
arol varchar; 
BEGIN 
SELECT rol into arol FROM security.rol where id= NEW.rol_id; 

IF arol like 'periodista' THEN 
INSERT INTO personal.periodista( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 
END IF; 
IF arol like 'corrector' THEN 
INSERT INTO personal.corrector( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 
END IF; 
IF arol like 'director' THEN 
INSERT INTO personal.director( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 
END IF; 
IF arol like 'disennador' THEN 
INSERT INTO personal.disennador( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 
END IF; 
IF arol like 'fotografo' THEN 
INSERT INTO personal.fotografo( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 
END IF; 
IF arol like 'jefe_informacion' THEN 
INSERT INTO personal.jefe_informacion( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 
END IF; 
IF arol like 'jefe_redaccion' THEN 
INSERT INTO personal.jefe_redaccion( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 

ELSE 
INSERT INTO security.users( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen); 
END IF; 
RETURN NEW; 
COMMIT; 

END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
ALTER FUNCTION security.rol_insert() 
OWNER TO postgres; 


y este es el error que me da: 

ERROR: límite de profundidad de stack alcanzado 
HINT: Incremente el parámetro de configuración «max_stack_depth» (actualmente 
2048kB), después de asegurarse que el límite de profundidad de stack de la 
plataforma es adecuado. 
CONTEXT: sentencia SQL: «SELECT rol FROM security.rol where id= NEW.rol_id» 
función PL/pgSQL security.rol_insert() en la línea 5 en sentencia SQL 
sentencia SQL: «INSERT INTO security.users( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen)» 
función PL/pgSQL security.rol_insert() en la línea 43 en sentencia SQL 
sentencia SQL: «INSERT INTO security.users( 
id, username, nombre, pass, ci, ultimav, rol_id, edad, sexo_id,correo, 
is_active, imagen) 
VALUES (default, NEW.username,NEW.nombre, NEW.pass, NEW.ci, NEW.ultimav, 
NEW.rol_id, NEW.edad, NEW.sexo_id,NEW.correo, NEW.is_active, NEW.imagen)» 
función PL/pgSQL security.rol_insert() en la línea 43 en sentencia SQL 


espero puedan ayudarme... 
muchas gracias de antemano.... 

-- 
”La vida no es solo esperar a que pase la tormenta, sino aprender a bailar en 
la lluvia.” 

Evento Universidad 2018. Conozca todos los detalles en 
http://universidad2018.uij.edu.cu

Reply via email to