From: | Anthony Sotolongo <asotolongo(at)gmail(dot)com> |
---|---|
To: | "Ing(dot)Informatico Osmany Rodriguez Duran" <orodriguez(at)uij(dot)edu(dot)cu>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Buenos dias |
Date: | 2017-12-11 14:52:00 |
Message-ID: | 740f15da-cc12-fda2-baee-0400d0ed8e29@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Martin Marques | 2017-12-11 15:04:25 | Re: Buenos dias |
Previous Message | Alvaro Herrera | 2017-12-11 14:31:52 | Re: Buenos dias |