Saltar al contenido

Instancias del modelo de Django primarias keys no restablecer a 1 después de eliminar todas las instancias

Después de mucho batallar hemos dado con la respuesta de esta contratiempo que muchos usuarios de nuestro sitio presentan. Si quieres aportar algún detalle no dejes de compartir tu información.

Solución:

Yo no lo llamaría un problema. Este es el comportamiento predeterminado para muchos sistemas de bases de datos. Básicamente, el contador de incremento automático de una tabla es persistente y la eliminación de entradas no afecta al contador. El valor real de la prima key no afecta el rendimiento ni nada, solo tiene valor estético (si alguna vez alcanza el límite de 2 mil millones, lo más probable es que tenga otros problemas de los que preocuparse).

Si realmente desea restablecer el contador, puede soltar y volver a crear la tabla:

python manage.py sqlclear  > python manage.py dbshell

O, si necesita conservar los datos de otras tablas en la aplicación, puede restablecer manualmente el contador:

python manage.py dbshell
mysql> ALTER TABLE  AUTO_INCREMENT = 1;

La razón más probable por la que ve un comportamiento diferente en sus aplicaciones fuera de línea y en línea es que el valor de incremento automático solo se almacena en la memoria, no en el disco. Se vuelve a calcular como MAX() + 1 cada vez que se reinicia el servidor de la base de datos. Si la mesa está vacía, se restablecerá por completo en un reinicio. Esto es probablemente muy frecuente para su entorno fuera de línea y casi ninguno para su entorno en línea.

Como han dicho otros, esto es enteramente responsabilidad de la base de datos.

Pero debes darte cuenta de que este es el deseable conducta. Una ID identifica de forma única a una entidad en su base de datos. Como tal, solo debe referirse a una fila. Si esa fila se elimina posteriormente, no hay razón por la que deba desear una nueva fila para reutilizar esa ID: si lo hiciera, crearía una confusión entre la entidad ahora eliminada que solía tener esa ID y la uno de nueva creación que lo ha reutilizado. No tiene sentido hacer esto y no debería querer hacerlo.

¿Realmente los eliminó de su base de datos o los eliminó usando Django? Django no cambiará AUTO_INCREMENT para su tabla simplemente eliminando filas de ella, por lo que si desea restablecer su tabla principal keyses posible que deba ingresar a su base de datos y:

ALTER TABLE  AUTO_INCREMENT = 1;

(Esto supone que está utilizando MySQL o similar).

Comentarios y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *