Error Módulo de Matrículas

Hola a todos!!!
Estoy migrando de 2.9.4 con script de migración 3.13.1, y me está dando error el módulo de MATRICULAS que con 2.9.3 y script 3.13.0, no me daba.
El error es “2017/09/07 10:10:24 - 04_sga_alumnos - ERROR: llave duplicada viola restricción de unicidad «sga_alumnos_alumno_key» Detail: Ya existe la llave (alumno)=(32288).”
El sql es el 04_sga_alumnos.sql y el problema está en el siguiente insert:
– 1. Inscripciones rechazadas
INSERT INTO sga_alumnos(alumno, persona,propuesta,plan_version,ubicacion,modalidad,cnt_readmisiones,regular,calidad)
SELECT
cpa.alumno,
cpp.persona,
cppr.propuesta,
cppv.plan_version,
mig.get_default(‘ubicacion’)::integer,
‘P’, – Presencial
0,
‘S’,
CASE
WHEN ca.situacion_asp = ‘AC’ THEN ‘A’ – Activo
WHEN sit.resultado_asp = ‘R’ THEN ‘P’ – Pasivo
ELSE ‘A’
END
FROM
mig._cnv_pk_alumnos as cpa,
mig._cnv_pk_propuestas_aspira as mpa,
mig.sga_carrera_aspira as ca,
mig.sga_situacion_asp as sit,
mig._cnv_pk_personas as cpp,
mig._cnv_pk_propuestas as cppr,
mig.sga_planes as sp,
mig._cnv_pk_planes_versiones as cppv
WHERE
cpa.tabla = ‘sga_carrera_aspira’ AND

mpa.unidad_academica = cpa.unidad_academica AND
mpa.carrera          = cpa.carrera AND
mpa.nro_inscripcion  = cpa.nro_inscripcion AND

ca.unidad_academica    = mpa.unidad_academica AND
ca.carrera             = mpa.carrera AND
ca.nro_inscripcion     = mpa.nro_inscripcion AND
ca.periodo_inscripcio  = mpa.periodo_inscripcio AND

sit.situacion_asp   = ca.situacion_asp AND
sit.resultado_asp = 'R' AND         -- Aspirante Rechazados

-- NOT EXISTS (SELECT alumno FROM sga_alumnos as a WHERE a.alumno = cpa.alumno) AND
NOT EXISTS (SELECT alumno FROM sga_alumnos as a WHERE a.propuesta = cppr.propuesta AND a.persona = cpp.persona) AND  -- no exista la persona en la propuesta

cpp.unidad_academica = cpa.unidad_academica AND
cpp.nro_inscripcion  = cpa.nro_inscripcion AND

cppr.unidad_academica = cpa.unidad_academica AND
cppr.carrera          = cpa.carrera AND

sp.unidad_academica = cpa.unidad_academica AND
sp.carrera          = cpa.carrera AND
sp.estado = 'V' AND -- Plan vigente (Ultimo plan de la carrera que entro en vigencia)

cppv.unidad_academica = sp.unidad_academica AND
cppv.carrera = sp.carrera AND
cppv.plan_g2 = sp.plan AND
cppv.version = sp.version_actual

Veo que no hubo modificaciones al script 04_sga_alumnos.sql desde la versión 3.13.0, por lo que supongo que el problema viene del algún script anterior.

El SELECT devuelve lo siguiente, para esa clave:
32288;12829;7;267;1;“P”;0;“S”;“P”
32288;12829;7;267;1;“P”;0;“S”;“P”

Efectivamente hay dos inscripciones rechazadas a la misma carrera para esta persona, les paso el contenido de mig.sga_carrera_aspira:
“REC”;“029”;“01-14203”;“INSCRIPCION 2011”;“2010-11-04”;“01”;“CI-11”;“D”;“”;“15”;“RF”;“”;1;“”;
“REC”;“029”;“01-14203”;“INSCRIPCION 2012”;“2011-11-02”;“01”;“CI-12”;“U”;“”;“15”;“RF”;“”;13;“”;

Gracias por su tiempo.
Saludos.
ANA

Ana, eso lo vimos y esta solucionado, por favor edita ese script y agrega la sentencia DISTINCT:

– 1. Inscripciones rechazadas
INSERT INTO sga_alumnos (alumno, persona,propuesta,plan_version,ubicacion,modalidad,cnt_readmisiones,regular,calidad)
SELECT DISTINCT
cpa.alumno,
cpp.persona,
cppr.propuesta,

Ale:
Ahora el trabajo de migración no dá error, pero lo dan los postcontroles en:
“sga_alumnos Error: Cantidad de Alumnos + Aspirantes a carrera no coinciden…”
Hay una diferencia de 2.710 más en g3 que en g2.
Consulta: cuál fue realmente el cambio de los script d emigración de 3.13.0 a 3.13.1? Esto tiene que ver con agregar a los rechazados de G2 en la tabla de alumnos de G3?
Me queda buscar quienes son, debería ser que estuvieran en negocios.sga_alumnos y no en mig.sga_alumnos o en mig.sga_carrera_aspira con situacion_asp = ‘AC’, no?
Gracias.
ANA

Esa diferencia deben ser los aspirantes rechazados en G2 que nunca llegaron a tener legajo (registro en sga_alumnos).
Ya que tanto los aspirantes en estado pendiente como los rechazados (que no tienen registro en G2) se los pasa a G3 y estan en la tabla de alumnos.

Fijate si esta query devuelve esa cantidad:

SELECT * FROM mig.sga_carrera_aspira as ca, mig.sga_situacion_asp as sa WHERE sa.situacion_asp = ca.situacion_asp AND sa.resultado_asp = 'R' AND NOT EXISTS (SELECT 1 FROM mig.sga_alumnos as a WHERE a.unidad_academica = ca.unidad_academica AND a.carrera = ca.carrera AND a.nro_inscripcion = ca.nro_inscripcion)
Decime que devuelve esta consulta. Si son esos 2170 registros.

Deberia modificar es pos-control de la tabla de alumnos.

Ale:
Ese query dá 2747 registros, pero ahi hay RF (Rechazados en el período de inscripción) duplicados. HIce:
SELECT distinct carrera,nro_inscripcion, ca.situacion_asp FROM mig.sga_carrera_aspira as ca, mig.sga_situacion_asp as sa WHERE sa.situacion_asp = ca.situacion_asp AND sa.resultado_asp = ‘R’
AND NOT EXISTS (SELECT 1 FROM mig.sga_alumnos as a WHERE a.unidad_academica = ca.unidad_academica AND a.carrera = ca.carrera AND a.nro_inscripcion = ca.nro_inscripcion) and ca.situacion_asp = ‘RF’;
Y tengo 2718. Hay 8 de diferencia.
Estoy casi segura que la diferencia son los RF que en esa propuesta nunca fueron alumnos para G2, que faltan en el poscontrol, lo que no sé es cómo sería el query para que el total diera lo mismo.
Saludos
ANA

Fijate como dan estas cuentas:
Guarani 2:
(1) Alumnos en G2:

    SELECT count(*)  FROM mig.sga_alumnos; 

(2) Inscripciones rechazadas o pendientes que no tienen legajo (registro en tabla sga_alumnos)

	SELECT count(distinct unidad_academica || '-' || carrera || '-' ||  nro_inscripcion) 
	  FROM mig.sga_carrera_aspira as ca
	 WHERE NOT EXISTS (SELECT 1 FROM mig.sga_alumnos as a WHERE a.unidad_academica = ca.unidad_academica AND a.carrera = ca.carrera AND a.nro_inscripcion = ca.nro_inscripcion);

– Guarani 3
(3) Alumnos:

SELECT count(*) FROM sga_alumnos;

(4) Alumnos que habia antes de comenzar la migracion:

SELECT filas FROM mig._tablas_g3 where tabla='sga_alumnos';

Fijate que da cada calculo y si la siguiente ecuación da bien:
(1) + (2) = (3) - (4)

Ale:
Ahora dá (1) + (2) = (3) + (4). Era lo que te decía. Corregimos el poscontrol?
Gracias
ANA

Si, lo adjunto en este mensaje.
Va a ir modificado en la version 3.13.2.
Gracias.
Saludos.


fx_pos_ctrl_matriculas.sql (14.3 KB)

Ok. Gracias