[pyar] Cambiar primary_key
Alejandro Caserez
alecaserez en gmail.com
Vie Ago 16 10:26:12 -03 2019
Tenes que conservar los datos de la “base vieja”?
Es decir, la migración que estás haciendo contempla también data nueva en todas las relaciones?
Enviado desde mi iPhone
El 16 ago. 2019, a la(s) 10:11, Carlos Miguel FARIAS <carlosmiguelfarias en gmail.com> escribió:
> Ese es uno de los problemas de usar auto-incremental.
> Cuando creas base nueva, debes dejar la columna de la clave vieja, con algún nombre significativo. p.e. clave_vieja (pueden agregar la, pero cuidado donde la agregan 😀😁, hoy es viernes, la_clave_vieja, clave_la... a no esa no).
> Luego corres un programa que tome los registros de las tablas asociadas y le cambies la clave foránea por la nueva clave creada.
> Puede haber otras variantes, pero indefectiblemente debes tener en una misma tabla la clave nueva y la vieja (que no sea la de Pappo).
> Si la clave nueva es clave primaria en las tablas relacionadas, allí el problema es muy grande.
> Supone que generaste las autoincrementales de 1 a 1000, y las claves viejas tienen números en esos rangos. Cuando modificas en la tabla asociada, puede producirse que la nueva número 500 (u otra) ya exista como clave vieja, se produciría clave duplicada en la tabla asociada.
> Eso implicará recrear las tablas asociadas.
> No es imposible, solo con cuidado y paciencia se logra.
> Sugiero tener acceso exclusivo a la base de datos (sea nativa o no) y por supuesto, buenas copias de seguridad.
> Para un caso como ese, yo clonaría todas las tablas antes de empezar la transformación. Luego hago el procedimiento, si rompo una tabla, la recupero del clon.
> La exclusividad no solo te da mayor velocidad, si no que evita que metan un cambio al medio que te "rompa todo" (y sobre todo si tocas la vieja de Pappo).
> Saludos: Miguel
>
>> El jue., 15 ago. 2019 a las 10:10, Juan Carizza (<juan.carizza en gmail.com>) escribió:
>> Buen día gente.
>>
>> Estoy con un problema raro, necesito cambiar un campo primary_key por otro. Estoy hablando del modelo user codigo[0]
>>
>> Ya resolví lo siguiente:
>> 1. Hacer las migraciones
>> 2. Popular el nuevo field uid con el autoincremental
>> 3. Dejar la DB con el mismo esquema que los modelos.
>>
>> El problema que me encontré es: Los ForeignKey, OneToOne, etc obviamente quedaron con los datos de la antigüa primary_key, la pregunta es ¿Cómo actualizar los datos de la antigüa primary key con los datos de la nueva? ¿No queda otra que recorrer todos los fields relacionales y remplazarlos?
>>
>> Gracias
>>
>>
>>
>> [0] http://linkode.org/#t6pOKN7qVD2VVWye3putu6
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20190816/cc0c8bbb/attachment.html>
Más información sobre la lista de distribución pyar