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