Hola:
Tengo un problema al correr el script 11 dela migración del calendario académico. Mi tira:
2016/11/22 08:58:16 - 11_sga_periodos_lectivos - ERROR: el valor null para la columna «entidad» viola la restricción not null
Detail: La fila que falla contiene (154, 1217, 2009-03-16, 2010-02-26, 2010-02-26, 2010-02-26, 2009-03-16, null).
Me dice que el valor entidad es nulo, pero no encuentro de donde lo saca.
¿Que tabla debo ver?
Gracias y saludos
La tabla sga_periodos_lectivos tiene el campo entidad.
Este campo se carga automáticamente por el trigger de insert de esa tabla (tib_sga_periodos_lectivos). Por favor fijate si tenes habilitado ese trigger.
Con la siguiente consulta ves si tenes triggers deshabilitados:
SELECT * from pg_trigger
WHERE tgname like 't%'
AND tgenabled = 'D'
ORDER BY tgname;
El dato para el campo “entidad” se recupera llamando a una funcion, fijate si la query siguiente devuelve algun resultado:
Hola Alejandro:
Gracias por tu pronto respuesta.
El trigger no me aparece deshabilitado. Y la función devuelve un valor (426896). Pero no lo inserta…
Saludos
Alejandro:
No es la primera base que migro. Esto que estoy probando es la migración de un G2 que tiene los datos de Humanidades de Madryn y Esquel, a una base que tiene datos de naturales y algunos postgrados
La tabla esta llena, queres los datos de sga_periodos_lectivos?
Es raro el error, porque no te dio ese error en una migracion anterior.
Por favor proba crear la siguiente funcion y ejecutarla para ver si se inserta el periodo lectivo o da el mismo error. La funcion intenta insertar un periodo lectivo y si lo inserta despues lo borra, asi que no te quedan estos datos en la base, pero si veremos si te da error o inserta sin problemas:
-- Crear la funcion para probar insertar un periodo lectivo. Fijate si el esquema se llama "negocio" o el que corresponda.
SET search_path = negocio;
CREATE OR REPLACE FUNCTION _prueba_pl()
RETURNS type_retorno_funcion AS
$BODY$
DECLARE
_p integer;
_pl integer;
_fecha date;
_entidad integer;
_rtn type_retorno_funcion;
-- Comienza la transaccion
BEGIN
_fecha := CURRENT_DATE;
select max(periodo) INTO _p from sga_periodos;
select max(periodo_lectivo) into _pl from sga_periodos_lectivos;
_p := _p + 1;
_pl := _pl + 1;
BEGIN
INSERT INTO sga_periodos (periodo, nombre, periodo_generico, fecha_inicio, fecha_fin, anio_academico)
VALUES (_p, 'PRUEBA_MIGRACION', 1, _fecha, _fecha + 1, 2016) ;
INSERT INTO sga_periodos_lectivos (periodo_lectivo, periodo, fecha_inicio_dictado, fecha_fin_dictado, fecha_tope_movimientos, fecha_inactivacion, fecha_publicacion_comisiones )
VALUES (_pl, _p, _fecha, _fecha + 1, _fecha , _fecha, _fecha) ;
-- Si no hubo error retorna el ID de la entidad insertada
SELECT entidad INTO _entidad FROM sga_periodos_lectivos WHERE periodo_lectivo = _pl;
_rtn.resultado := 1;
_rtn.mensaje_indice = 'El valor de entidad insertado es ' || cast(_entidad as text);
DELETE FROM sga_periodos_lectivos WHERE periodo_lectivo = _pl;
DELETE FROM sga_periodos WHERE periodo = _p;
RETURN _rtn;
-- Error.
EXCEPTION WHEN OTHERS THEN
_rtn.resultado := -1;
_rtn.mensaje_indice := 'Error al insertar el PL';
_rtn.sqlerrm := SQLERRM;
_rtn.sqlstate := SQLSTATE;
DELETE FROM sga_periodos_lectivos WHERE periodo_lectivo = _pl;
DELETE FROM sga_periodos WHERE periodo = _p;
RETURN _rtn;
END;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
-- Para ejecutar la funcion y ver el resultado que da
select * from _prueba_pl();
-- Borrar la funcion
DROP FUNCTION _prueba_pl();
Alejandro:
Tira esto:
-1;“Error al insertar el PL”;“”;“23502”;“el valor null para la columna «entidad» viola la restricción not null”.
Ahora, tambien hubo algo raro en otro script. El 19 de Responsables_academicos. Tampoco cargaba la entidad, y yo le puse a mano la misma entidad que a la facultad de humanidades, que ya estaba, por esto que charlamos por GDS.
Saludos
Entonces tenes un problema con ese tema del dato “entidad”, el cual se encuentra en varias tablas y se debe insertar automaticamente por trigger.
Si ese dato insertaste a mano esta mal, porque es un dato que segun la tabla donde se encuentre lleva un codigo diferente de “entidad_subtipo” en la tabla sga_g3entidades.
El tema que si lo cargaste a mano y pusiste cualquier valor eso te puede traer problemas en algun momento…
¿Tocaste algo mas en los datos de la base?
Proba correr esto y volver a correr esa funcion que te pase anteriormente:
SELECT setval('sga_g3entidades_seq',(SELECT MAX(entidad) FROM sga_g3entidades));
Respecto al tema de responsable academica - sedes, te respondimos la solicitud que ingresaste por ese tema, pudiste verlo?
Ok. Dale, creo es lo mejor. Fijate de hacer toda la migracion y luego cambiar el dato de responsable academica a los datos migrados de esa ultima base como te indicamos en el GDS.
Ante cualquier problema nos avisas antes de modificar algo.