[pyar] Cambiar primary_key

Carlos Miguel FARIAS carlosmiguelfarias en gmail.com
Vie Ago 16 10:11:15 -03 2019


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20190816/93b120b1/attachment.html>


Más información sobre la lista de distribución pyar