sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo reenviar una secuencia de clave principal en Django de forma segura?

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:

  1. Establezca la secuencia con un MAXVALUE 49999 SIN CICLO
  2. Cuando se alcanza 49999, el próximo save() se ejecutará en un error de postgres
  3. 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"
  4. 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)