Hola, buenos dias. Actualizamos desde guarani 3.18.1 hacia la version 3.19.1 en un servidor de desarrollo. Estamos probando que ande todo normalmente, y nos encontramos con un error. En autogestion (g3w) al entrar como un alumno y dirigirnos hacia Inscripcion a Materias no se puede entrar a esa interfaz y en la parte inferior indica un error.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clase: SIU\Chulupi\ErrorKernelDb
mensaje: SQL ERROR: SQLSTATE[42883]: Undefined function: 7 ERROR: function get_mayor(timestamp with time zone, timestamp with time zone) does not exist
LINE 12: … sga_periodos_inscripcion_fechas.fecha_inicio AND get_mayor(…
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
SELECT
sga_periodos_inscripcion_fechas.fecha_inicio as periodo_activo_vigente
FROM sga_periodos_inscripcion_aplanado
JOIN sga_periodos_inscripcion_fechas ON sga_periodos_inscripcion_fechas.periodo_insc = sga_periodos_inscripcion_aplanado.periodo_insc
JOIN sga_periodos_inscripcion ON sga_periodos_inscripcion.periodo_inscripcion = sga_periodos_inscripcion_fechas.periodo_inscripcion
JOIN sga_periodos ON sga_periodos.periodo = sga_periodos_inscripcion.periodo
JOIN sga_periodos_genericos ON sga_periodos_genericos.periodo_generico = sga_periodos.periodo_generico
WHERE sga_periodos_inscripcion_aplanado.plan_version = ‘101’
AND sga_periodos_inscripcion_fechas.habilitado = ‘S’
AND sga_periodos_inscripcion_fechas.habilitado_interfaz in (0,2)
AND sga_periodos_genericos.periodo_generico_tipo = 1 – Periodos Lectivos.
AND CURRENT_TIMESTAMP BETWEEN sga_periodos_inscripcion_fechas.fecha_inicio AND get_mayor(sga_periodos_inscripcion_fechas.fecha_fin, sga_periodos_inscripcion_fechas.fecha_tope_bajas)
LIMIT 1;
traza: [TRAZA]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Lo que nos indica que no se encuentra esa funcion llamada get_mayor con esos argumentos.
Eso nos llevó a este post: https://foro.comunidad.siu.edu.ar/index.php?topic=21089.msg94051
Por lo que buscamos el archivo get_mayor.sql y lo corrimos en la DB de desarrollo. Retornando exitosamente creando la funcion.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CREATE OR REPLACE FUNCTION get_mayor(pValor1 anyelement, pValor2 anyelement)
RETURNS anyelement AS
$BODY$
BEGIN
IF pValor1 > pValor2 THEN
RETURN pValor1;
ELSE
RETURN pValor2;
END IF;
END;
$BODY$
LANGUAGE ‘plpgsql’ VOLATILE;
– ++++++++++++++++++++++++++++++ Fin Function +++++++++++++++++++++++++++++++++
– REVOKE EXECUTE ON FUNCTION get_mayor (anyelement, anyelement) FROM public;
GRANT EXECUTE ON FUNCTION get_mayor (anyelement, anyelement) to public;
/*
select * from get_mayor(current_timestamp , now());
select * from get_mayor(2 , 5);
select * from get_mayor(‘a’::varchar, ‘b’::varchar);
*/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Sin embargo el error sigue persistiendo. Tendra que ver con alguna cache? Aun asi, por ejemplo, al probar la consulta del error en la base misma, tambien se sigue mostrando el error.
Por otro lado, habrá algo que hicimos mal? Es bastante raro que falte una función si durante el proceso de migración de la DB no hubo errores. Es acaso un bug conocido?