HOla Osmany, has intentado colocar el return null;  luego de cada insert (para salir de la función) y creo que eso puede evitar que se inserte recursivamente.

pues al final veo un return new;

algo como:


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

return null;


Saludos


On 11/12/17 11:23, Ing.Informatico Osmany Rodriguez Duran wrote:
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