Hola:
Estuvimos migrando a un solo repositorio dos Unidades Academicas, y nos encontramos con un problema con el tema de las Ubicaciones. Nos duplico lo que teniamos. Ahora tenemos dos veces cada sede de la universidad. Si quiero eliminar alguno me tira error de clave.
Necesito que en las ubicaciones solo quede una sede, no duplicadas y con un codigo que va del 1 al 4, pero tengo del 1 al 9 (ya que tambien esta Sede Unica).
Como puedo hacer para cambiar esto? Como se hace para que en proximas migraciones no me vuelva a pasar lo mismo? ya que tenemos pensado migrar varias unidades mas y todos tienen las mismas ubicaciones.
Muy posiblemente tengan que setar el mismo codigo y nombre para las sedes en las distintas bases de informix.
Fijate en 02_Modulos\05_Tablas_Comunes\01_tablas_conversion como se hace el insert en las tablas de conversion del migrador.
Podrian armar un script para correrlo ya sea en el schema mig de postgres o en las bases informix, cuando las importen para migrar.
Veo que lo tienen por nombre y no por codigo como lo tengo configurado en todos los G2.
El problema es ahora que hago? ya migre, tengo todo duplicado y no me deja borrarlo. Estan mal hecho los script
No tengo mucho para decirte. Buscar donde esta referenciada y cambiarlo, como cualquier fk.
No deberia llevarte tanto tiempo migrar dos ua. De hecho a mi no me lleva mas de dos horas hacerlo y lo repito cada vez que sale un error como te salió a vos.
Hola Rodrigo, tenes dos opciones: volver a migrar o borrar las sedes duplicadas y reemplazarlas por las que corresponde en las tablas donde estan referenciadas.
No es que esten mal realizado los scripts. Si miras los scripts, las sedes se pasan en el módulo de “Tablas Comunes” (Carpeta 05_Tablas_Comunes), al migrar este módulo lo que se hace es cargar las sedes que tenes en Guarani 2 en la tabla de conversion mig._cnv_pk_sedes. Al terminar de migrar este modulo te permite poder decidir que sedes vas a migrar y cuales no porque ya existen en Guarani 3, las que no queres que se migren entonces debes cambiar el valor del campo migrar de 1 a 0 y reemplazar el valor del campo ubicacion por el valor que corresponda a esa sede (sga_ubicaciones.ubicacion) que esta en Guarani 3.
Esto se hace automático en el script 05_Tablas_Comunes\01_Tablas_Conversion.sql en la linea 45. Aqui se busca si existe alguna ubicacion de tipo sede en Guarani 3 con el “mismo nombre” (esta es la definicion que tomamos, como podriamos haber tomado que se compare por código de la sede. Como no sabemos como configuraron las sedes en cada lugar, es que teniamos que tomar un criterio para detectar que sedes ya existen y este fue el de buscar las sedes por el mismo nombre) que la sede a importar desde Guarani 2, si hubiere algun leve cambio en el nombre no lo va a detectar, pero les permite poder hacer este ajuste en forma manual luego de migrar este modulo, ya que la migracion a la tabla sga_ubicaciones de Guarani 3 se hace en el módulo siguiente en el script 10_Generales\02_Migracion\10_sga_ubicaciones.sql
Lo mismo sucede con las materias, carreras, personas, docentes, etc…
Si necesitas saber que tablas referencian a sga_ubicaciones, corre el script siguiente, el cual te indica el nombre de la foreign key, tabla, columna, etc:
select conname as “Foreign Key”,
t1.relname as “Tabla que referencia”,
a1.attname as “Columna que referencia”,
t2.relname as “Tabla referenciada”,
a2.attname as “Columna referenciada”
from pg_constraint as c,
pg_class as t1,
pg_class as t2,
pg_attribute as a1,
pg_attribute as a2
where t2.relname in (‘sga_ubicaciones’)
– and a2.attname = ‘ubicacion’
– and a2.attname <> a1.attname – Para ver las referencias con nombres diferentes en las columnas relacionadas.
and c.conrelid = t1.relfilenode
and t2.relfilenode = c.confrelid
and a1.attrelid = t1.relfilenode
and a2.attrelid = t2.relfilenode
AND (
( c.conkey[1] = a1.attnum AND c.confkey[1] = a2.attnum ) OR
( c.conkey[2] = a1.attnum AND c.confkey[2] = a2.attnum ) OR
( c.conkey[3] = a1.attnum AND c.confkey[3] = a2.attnum ) OR
( c.conkey[4] = a1.attnum AND c.confkey[4] = a2.attnum ) OR
( c.conkey[5] = a1.attnum AND c.confkey[5] = a2.attnum ) OR
( c.conkey[6] = a1.attnum AND c.confkey[6] = a2.attnum ) OR
( c.conkey[7] = a1.attnum AND c.confkey[7] = a2.attnum ) OR
( c.conkey[8] = a1.attnum AND c.confkey[8] = a2.attnum ) OR
( c.conkey[9] = a1.attnum AND c.confkey[9] = a2.attnum ) OR
( c.conkey[10] = a1.attnum AND c.confkey[10] = a2.attnum )
)
order by 2
;
Voy a empezar de nuevo, es demasiado para cambiar, ya que esta cargado de antes. Es engorroso volver a empezar pero no quedo otra, sino el sistema queda mal.
Gracias y saludos
Rodrigo, en esta etapa de pruebas paso a paso podés ir generando un dump; por cualquier eventual corrección u ajuste es útil si no es necesario contar la base vacía y sin ejecutar el paso de informix a postgres.
¡Saludos!