Como aún no he encontrado una forma "automatizada" de hacer esto, estoy pensando en la siguiente solución:sería factible para mi situación particular:
- Establezca la secuencia con un MAXVALUE 49999 SIN CICLO
- Cuando se alcanza 49999, el próximo save() se ejecutará en un error de postgres
- Atrapa esa excepción y vuelve a subir como un error de formulario "te has quedado sin números, reinicia al siguiente bloque y vuelve a intentarlo"
- Proporcione una vista donde el usuario pueda activar el siguiente bloque, es decir, ejecute "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"
No me gusta hacer el reinicio automáticamente al detectar la excepción:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
ya que me temo que dos save() simultáneos que se quedan sin ID darán lugar a dos reinicios separados y una violación posterior de la restricción única. (básicamente el mismo concepto que el problema original)