Acudo una ves mas a su ayuda porque no logro eliminar el error de mi código y 
por mas q lo reviso 
no encuentro la solución ya lo he hecho de diversas formas y me sigue dando el 
mismo error y lo he probado 
en varias pc con varios postgres pero da el mismo error y sería una pena no 
poder hacer esa función ya q es bastante 
importante en mi proyecto le explico un poco como funciona; 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 trigger: 

CREATE TRIGGER insertar_rol 
BEFORE INSERT 
ON security.users 
FOR EACH ROW 
EXECUTE PROCEDURE security.rol_insert2(); 


esta es la funcion trigger: 
-- Function: security.rol_insert() 

-- DROP FUNCTION security.rol_insert(); 

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

CASE WHEN 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); 

WHEN 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); 

WHEN 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); 

WHEN 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); 

WHEN 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); 

WHEN 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); 


WHEN 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 CASE; 

RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql; 



y este es el triste error: 

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_insert2() 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_insert2() en la línea 44 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_insert2() en la línea 44 en sentencia SQL 

este error se hace cíclico y se repite una y otra ves, aclarar q cuando lo hice 
por primera ves me inserto todo muy bien para ser exacto los primeros 6 roles 
los inserto bien 
de ahí en adelante empezó a dar error he hecho casi de todo hasta donde me 
permite mi conocimiento pero nada no logro nada más que frustrarme, espero 
logren entender un poco cual es la idea de lo deseo hacer y puedan ayudarme 
muchas gracias de antemano..... 

-- 
Ing. en Informática Osmany Rodríguez Durán 
Universidad Jesús Montané Oropesa Isla de la Juventud 

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

Reply via email to