Re: Buenos dias

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

In response to

  • Buenos dias at 2017-12-11 14:23:06 from Ing.Informatico Osmany Rodriguez Duran

Responses

Browse pgsql-es-ayuda by date

  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