django database postgresql primary-key

Django+PostgreSQL: ¿cómo restablecer la clave principal?



database primary-key (4)

He estado trabajando en una aplicación en Django. Para empezar, por simplicidad, había estado usando sqlite3 para la base de datos.

Sin embargo, una vez que me mudé a PostgreSQL, me encontré con un pequeño problema: la clave principal no se restablece una vez que borro una tabla.

Esta aplicación es un juego que se juega durante un largo período de tiempo (semanas). Como tal, cada vez que se inicia un nuevo juego, todos los datos se borran de la base de datos y luego se agregan nuevos datos aleatorizados.

Me gustaría poder comenzar de nuevo con las teclas principales comenzando en 1 cada vez que limpio / reconstruyo el juego.

El código sigue funcionando como está, pero los enteros son una forma bastante natural de describir los objetos en mi juego. Me gustaría que cada nuevo juego comience en 1 en lugar de donde sea que el último juego haya quedado.

¿Cómo puedo restablecer el contador de claves principales en PostgreSQL? Tenga en cuenta que no es necesario que conserve los datos en la tabla, ya que los borro de todos modos.



En el directorio de tu aplicación prueba esto:

python manage.py help sqlsequencereset

Mételo en psql de esta manera para ejecutar realmente el restablecimiento:

python manage.py sqlsequencereset myapp1 myapp2 | psql

Editar: aquí hay un ejemplo de la salida de este comando en una de mis tablas:

BEGIN; SELECT setval(''"project_row_id_seq"'', coalesce(max("id"), 1), max("id") IS NOT null) FROM "project_row"; COMMIT;


Veo las claves primarias de incremento automático como identificadores puramente internos para los registros de la base de datos, y no me gusta exponerlas a los usuarios. Por supuesto, es un diseño común usarlos como parte de las URL, pero incluso allí las babosas u otros identificadores se sienten más apropiados.