error de llave duplicada al migrar actas scripts 3.12.0 guarani 3.12.0

Estimados me sale este error y no se como solucionarlo!
ya he migrado otros planes con este script y no me paso este problema.
que puedo hacer?


ERROR: llave duplicada viola restricción de unicidad «iu_sga_actas_folios_libro_tomo_folio_fisico»
SQL state: 23505
Detail: Ya existe la llave (libro_tomo, folio_fisico)=(54, 1).
Context: sentencia SQL: «INSERT INTO sga_actas_folios (id_acta, folio, folio_fisico, libro_tomo)
VALUES (_id_acta, _folio, cur1.folio_fisico, _libro_tomo)»
función PL/pgSQL ext.migrar_actas_cursadas_promocion() en la línea 173 en sentencia SQL


me suena que puede ser alguna sequence?

Esto es de migracion de actas de examen?

Tabla: ext.mig_actas_examen_detalle

¿Que tenes registrados en los campos folio_fisico y folio ?

Si en ambos campos tenes registrado datos, entonces no deberia pasar lo siguiente:
nro_acta - folio_fisico - folio - alumno
5412 128 1 A
5412 128 1 B
5412 128 1 C
5412 128 2 D → Deberia ser folio = 1 o folio_fisico con otro valor.
5412 129 1 E → Deberia ser folio_fisicio = 128 o folio <> 1.
9243 128 1 B → Deberia ser otro folio_fisico porque es otro acta y no puede ser un mismo folio fisico en diferentes actas

Es decir, si estan cargados, los folios fisicos y nro de folio deben coincidir en cada acta.

si estoy en migracion de actas!
pero el error me lo da en mig_curs_prom()

te adjunto en que momento da el error.
verifique lo que me nombras arriba por las dudas y esta ok

aqui te paso la funcion que llama y da el error


2017/04/28 10:01:00 - mig_curs_prom - Ejecutando SQL: SELECT * FROM ext.migrar_actas_cursadas_promocion();
2017/04/28 10:01:07 - mig_curs_prom - ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : Ocurrió un error al ejecutar esta entrada de trabajo:
2017/04/28 10:01:07 - mig_curs_prom - Couldn’t execute SQL: SELECT * FROM ext.migrar_actas_cursadas_promocion();
2017/04/28 10:01:07 - mig_curs_prom -
2017/04/28 10:01:07 - mig_curs_prom - ERROR: llave duplicada viola restricción de unicidad «iu_sga_actas_folios_libro_tomo_folio_fisico»
Detail: Ya existe la llave (libro_tomo, folio_fisico)=(54, 1).
Where: sentencia SQL: «INSERT INTO sga_actas_folios (id_acta, folio, folio_fisico, libro_tomo)
2017/04/28 10:01:07 - mig_curs_prom - VALUES (_id_acta, _folio, cur1.folio_fisico, _libro_tomo)»
función PL/pgSQL ext.migrar_actas_cursadas_promocion() en la línea 173 en sentencia SQL


error.jpg

error.png

Bueno, entonces la consulta va por los datos que tenes en la tabla ext.mig_acta_cursada_promocion

Podes enviar los datos de la siguiente consulta:

SELECT  mig.origen, mig.nro_acta, 
                     COALESCE(mig.nro_acta,'-1') as nro_acta_new,
                     to_char(mig.fecha, 'YYYY-MM-DD'), mig.folio_fisico, mig.folio, mig.renglon,
                     CASE  WHEN mig.origen = 'R' THEN 1  WHEN mig.origen = 'P' THEN 2  END as instancia,  
                     com.comision as comision,
                     alu.alumno as alumno,
                     COALESCE(mig.plan_version, alu.plan_version) as plan_version
                 FROM ext.mig_acta_cursada_promocion as mig,
                      vw_comisiones as com,
                      mdp_personas_documentos as doc,
                      mdp_personas as per,
                      sga_alumnos as alu
                WHERE mig.comision_nombre        = com.comision_nombre
                AND   mig.anio_academico         = com.anio_academico
                AND   mig.periodo_lectivo_nombre = com.periodo_lectivo_nombre
                AND   mig.actividad_codigo       = com.elemento_codigo
                
                AND   doc.tipo_documento = mig.tipo_documento
                AND   doc.nro_documento  = mig.nro_documento
                AND   per.documento_principal = doc.documento
                AND   alu.persona   = per.persona
                AND   alu.propuesta = mig.propuesta
                
           ORDER BY mig.origen, 
                    COALESCE(mig.nro_acta,'-1'), 
                    mig.fecha, 
                    COALESCE(mig.folio_fisico,-1), 
                    COALESCE(mig.folio,-1), 
                    COALESCE(mig.renglon,-1), 
                    per.apellido, 
                    per.nombres

Fijate si esta consulta recupera alguna fila, de ser asi tenes registrado mas de una vez el mismo nro de libro/folio fisico para dos actas diferentes.

SELECT nro_libro, folio_fisico, COUNT(DISTINCT origen || '-' || nro_acta)
 FROM ext.mig_acta_cursada_promocion 
 GROUP BY 1, 2
 HAVING COUNT (DISTINCT origen || '-' || nro_acta) > 1;

la segunda consulta si me da dos lineas
“1”;1;3
“1”; ;34

Alejandro acabo de encontrar las actas de promocion en cuestion

Pudiste encontrar el problema? Cual era?
Asi vemos si es necesario agregar ese pre-control para detectar este problema de folios fisicos y/o libros duplicados…

el error es mio porque en la tabla de materias donde relaciono no estaban estas dos entonces le pudo a ambas actas el mismo libro folio
igual me di cuenta con la ultima consultma que me enviaste
Gracias

Ok. Bueno agregaremos este precontrol para detectar estos casos antes de migrar.
Gracias.
Saludos.