Buenas, cuando intento migrar el módulo del asunto a una base unificada de G3 con N unidades académicas migradas anteriormente, obtengo el siguiente error:
2019/02/13 19:12:17 - 02_mdp_datos_censales - ERROR: update o delete en «mdp_datos_censales» viola la llave foránea «fk_mdp_eleccion_institucion_mdp_datos_censales» en la tabla «mdp_eleccion_institucion»
2019/02/13 19:12:17 - 02_mdp_datos_censales - Detail: La llave (dato_censal)=(280) todavía es referida desde la tabla «mdp_eleccion_institucion».
Revisando el script encuentro que en un momento se insertan en una tabla temporaria los registros y luego los borra:
INSERT INTO _temp_dc (persona, dato_censal)
SELECT mp.persona, dc.dato_censal
FROM mig._cnv_pk_personas as mp,
mdp_datos_censales as dc
WHERE mp.migrar_datos_censales = 1
AND mp.existe = 1
AND dc.persona = mp.persona;
DELETE FROM mdp_datos_economicos WHERE dato_censal IN (SELECT dato_censal FROM _temp_dc);
DELETE FROM mdp_datos_actividades WHERE dato_censal IN (SELECT dato_censal FROM _temp_dc);
DELETE FROM mdp_datos_personales WHERE dato_censal IN (SELECT dato_censal FROM _temp_dc);
DELETE FROM mdp_datos_censales WHERE dato_censal IN (SELECT dato_censal FROM _temp_dc);
DELETE FROM mdp_datos_salud WHERE persona IN (SELECT persona FROM _temp_dc);
¿Está correcto este comportamiento? ¿Como continúo?
Versión 3.15.0 de los scripts
G2 versión 2.9.4
Si no entiendo mal, lo que estarían haciendo esos delete es borrar los registros que ya están de otra migración, y supongo que sería para volverlos a insertar a partir de los datos de la nueva migración . Obviamente esto es una suposición tratando de entender lo que hace el script. Y pareciera que faltó algún delet y por eso te estaría dando el error. Puede ser?
Hola Damian, faltaban dos deletes sobre unas tablas nuevas.
Ya habia sido reportado en este mensaje, y fue arreglado en los scripts de la version 3.16.
Por favor fijate si podes bajar estos scripts y probar con lo ultimo publicado.
hay un error de sintaxis, falta la palabra ON en la expresión del vínculo entre mcp y msp
IF c_error = 0 THEN
SELECT count(distinct msp.nro_inscripcion) INTO c_cant
FROM mig._cnv_pk_personas as mcp
JOIN mig.sga_datos_censales as msp ON (mcp.unidad_academica = msp.unidad_academica AND mcp.nro_inscripcion = msp.nro_inscripcion)
LEFT JOIN mig.aca_usuarios_ag ag ON ag.unidad_academica = msp.unidad_academica AND ag.nro_inscripcion = msp.nro_inscripcion
WHERE mcp.migrar = 1 ;
ret := ('Control por persona','OK: Se migraron los registros de datos censales para todas las personas.',c_cant,c_cant)::mig.pos_ctrl_type;
RETURN NEXT ret;
END IF;