[SOLUCIONADO] Error en paso 07_mdp_personas_documentos de mig_personas

Hola que tal?

Estamos migrando una base de datos y al ejecutar mig_personas en el paso: 07_mdp_personas_documentos nos sale el siguiente error como si estuviese duplicado ese registro. Pero mirando bien no está duplicado, es la misma persona pero con tipo y nro documento distintos. Estamos en la version 3.10.2. Y hemos actualizado a la fecha de hoy los scripts de migración. Les transcribo el error:

2015/09/04 09:29:26 - 07_mdp_personas_documentos - INSERT INTO mdp_personas_documentos (persona,pais_documento,tipo_documento,nro_documento)
2015/09/04 09:29:26 - 07_mdp_personas_documentos - SELECT mcp.persona,
2015/09/04 09:29:26 - 07_mdp_personas_documentos - mspd.pais_documento,
2015/09/04 09:29:26 - 07_mdp_personas_documentos - mspd.tipo_documento,
2015/09/04 09:29:26 - 07_mdp_personas_documentos - mspd.numero_documento
2015/09/04 09:29:26 - 07_mdp_personas_documentos - FROM mig._cnv_pk_personas mcp,
2015/09/04 09:29:26 - 07_mdp_personas_documentos - mig.sga_personas_doc mspd
2015/09/04 09:29:26 - 07_mdp_personas_documentos - WHERE mcp.unidad_academica = mspd.unidad_academica AND
2015/09/04 09:29:26 - 07_mdp_personas_documentos - mcp.nro_inscripcion = mspd.nro_inscripcion AND
2015/09/04 09:29:26 - 07_mdp_personas_documentos - mcp.existe=0 AND
2015/09/04 09:29:26 - 07_mdp_personas_documentos - NOT EXISTS (SELECT ‘’ FROM mig.sga_personas msp
2015/09/04 09:29:26 - 07_mdp_personas_documentos - WHERE msp.unidad_academica = mspd.unidad_academica AND
2015/09/04 09:29:26 - 07_mdp_personas_documentos - msp.nro_inscripcion = mspd.nro_inscripcion AND
2015/09/04 09:29:26 - 07_mdp_personas_documentos - msp.pais_documento = mspd.pais_documento AND
2015/09/04 09:29:26 - 07_mdp_personas_documentos - msp.tipo_documento = mspd.tipo_documento AND
2015/09/04 09:29:26 - 07_mdp_personas_documentos - msp.nro_documento = mspd.numero_documento);
2015/09/04 09:29:26 - 07_mdp_personas_documentos -
2015/09/04 09:29:26 - 07_mdp_personas_documentos -
2015/09/04 09:29:26 - 07_mdp_personas_documentos -
2015/09/04 09:29:26 - 07_mdp_personas_documentos - INSERT INTO mig._app_migracion ( modulo, fecha_generacion, fecha_actualiz, script_corrido )
2015/09/04 09:29:26 - 07_mdp_personas_documentos - VALUES (‘PERSONAS’ , CURRENT_DATE, CURRENT_TIMESTAMP,7 );
2015/09/04 09:29:26 - 07_mdp_personas_documentos -
2015/09/04 09:29:26 - 07_mdp_personas_documentos - ERROR: llave duplicada viola restricción de unicidad «iu_persona_pais_tipo_documento»
Detail: Ya existe la llave (persona, pais_documento, tipo_documento)=(4073, 56, 90).

Desde ya gracias.

SALUDOS.-

Buen día Sergio:
¿En la base ‘origen’ tienen cargada a la misma persona dos veces? ¿Están migrando a una base que ya cuenta con información (migración previa)? También confirmanos por favor si esa persona tiene más de un documento en sga_personas_doc y si el esquema mig estaba vacío al momento de comenzar con esta migración.
¡Gracias!

Hola Emilse, la persona no figura dos veces. Empezamos esta migración de cero sin datos previos. Lo que si, es que esta persona tiene dos documentos en sga_personas_doc pero con tipos y numeros distintos

Sera que existe el mismo documento para una persona en “sga_personas” y para otra persona en “sga_personas_doc” ?

Esta consulta te devuelve algun registro en la base de Guarani 2 en informix?


SELECT * FROM sga_personas_doc as d
WHERE EXISTS (SELECT 1 FROM sga_personas as p WHERE d.nro_inscripcion <> p.nro_inscripcion AND d.pais_documento = p.pais_documento AND d.tipo_documento = p.tipo_documento AND d.numero_documento = p.nro_documento)

Si devuelve datos aca esta el problema, es que existe un mismo nro de documento (pais_docuemento + tipo_documento +
nro_documento) para una persona en sga_personas y para otra persona en sga_personas_doc
Con lo cual hay que corregir esto en la tabla sga_personas_doc…

No Emilse, la consulta no dio ningún resultado.

¿Y esta otra consulta?

SELECT * FROM sga_personas_doc as d
WHERE EXISTS (SELECT 1 FROM sga_personas as p WHERE d.unidad_academica = p.unidad_academica AND d.nro_inscripcion = p.nro_inscripcion AND d.pais_documento = p.pais_documento AND d.tipo_documento = p.tipo_documento AND d.numero_documento = p.nro_documento)

Aunque viendo el indice unico que falla, es que tenes registrado para una misma persona un mismo tipo de documento pero con numeroS de documento distintos, es decir por ejemplo una persona tiene cargado dos DNI con numeros diferentes o dos Pasaportes con numeros diferentes.


SELECT * FROM sga_personas_doc as d
WHERE EXISTS (SELECT 1 FROM sga_personas as p WHERE d.unidad_academica = p.unidad_academica AND d.nro_inscripcion = p.nro_inscripcion AND d.pais_documento = p.pais_documento AND d.tipo_documento = p.tipo_documento );

SELECT unidad_academica, nro_inscripcion, pais_documento, tipo_documento , COUNT(*)
FROM sga_personas_doc
GROUP BY 1,2,3,4
HAVING COUNT(*) > 1;

Alejandro. :slight_smile:

Hola Alejandro, te mando las salidas de las consultas:

SELECT * FROM sga_personas_doc as d
WHERE EXISTS (SELECT 1 FROM sga_personas as p WHERE d.unidad_academica = p.unidad_academica AND d.nro_inscripcion = p.nro_inscripcion AND d.pais_documento = p.pais_documento AND d.tipo_documento = p.tipo_documento AND d.numero_documento = p.nro_documento)

12 FTS I-0005 52 90 G04325953
13 FTS I-0006 52 90 G04208398

SELECT * FROM sga_personas_doc as d
WHERE EXISTS (SELECT 1 FROM sga_personas as p WHERE d.unidad_academica = p.unidad_academica AND d.nro_inscripcion = p.nro_inscripcion AND d.pais_documento = p.pais_documento AND d.tipo_documento = p.tipo_documento );

3 FTS 1225 56 90 10682582 3
10 FTS I-0003 55 90 C2616121
11 FTS I-0004 55 90
12 FTS I-0005 52 90 G04325953
13 FTS I-0006 52 90 G04208398
14 FTS I-0007 595 90
17 FTS 2596 57 90 AM648228

Una aclaracón: los valores vacios en esta consulta nosotros los completamos en mig.sga_personas_doc, cosa que para la migración ya tenga esos valores y no queden nulos.

SELECT unidad_academica, nro_inscripcion, pais_documento, tipo_documento , COUNT()
FROM sga_personas_doc
GROUP BY 1,2,3,4
HAVING COUNT(
) > 1;

–NO DEVUELVE NADA

Hola Martin

estas dos personas

12 FTS I-0005 52 90 G04325953
13 FTS I-0006 52 90 G04208398

tienen el mismo documento cargado en sga_personas y sga_personas_doc.

Cuando los migradores intentan juntarlos te sale el error.

En Guarani 3 no se permite que una persona tenga registrado documentos con el mismo tipo de documento
Estas dos personas tienen cargado un pasaporte en sga_personas y el mismo pasaporte en sga_personas_doc:
12 FTS I-0005 52 90 G04325953
13 FTS I-0006 52 90 G04208398
Solución: Borrar estos dos registros que estan duplicados:

DELETE FROM sga_personas_doc WHERE persona_documento IN (12,13)

Estas personas tambien tienen registrado un pasaporte en sga_personas y otro/s pasaportes en sga_personas_doc (estan incluidas las dos personas anteriores):
3 FTS 1225 56 90 10682582 3
10 FTS I-0003 55 90 C2616121
11 FTS I-0004 55 90
12 FTS I-0005 52 90 G04325953
13 FTS I-0006 52 90 G04208398
14 FTS I-0007 595 90
17 FTS 2596 57 90 AM648228

¿Es correcto que una persona tenga mas de un pasaporte con diferente numero?

PD: Agregaremos estos pre-controles en la migración del módulo de Personas para contemplar estos casos.

Alejandro, ahi quedó solucionado.

GRACIAS!

Martin, ¿tienen más casos en los que una persona tenga más de un pasaporte con diferente numero?