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