El 7 de diciembre de 2017, 14:01, ElMalkriao <orodrig...@uij.edu.cu>
escribió:

> 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
>
>
Lo que se me ocurre mas probable es que tengas alguna llamada recurrente /
circular, probablemente en un trigger o regla
en la tabla "users".

HTH
-- 
--
Gerardo Herzig
Principal Consultant at Ayres Data Team
root at Via Postgres Argentina

Reply via email to