Comme je n'ai pas encore trouvé de moyen "automatisé" de le faire, je pense à la solution de contournement suivante - ce serait faisable pour ma situation particulière :
- Définir la séquence avec un MAXVALUE 49999 NO CYCLE
- Lorsque 49999 est atteint, le prochain save() rencontrera une erreur postgres
- Attrapez cette exception et relancez comme une erreur de formulaire "vous n'avez plus de nombres, veuillez réinitialiser au bloc suivant puis réessayez"
- Fournir une vue dans laquelle l'utilisateur peut activer le bloc suivant, c'est-à-dire exécuter "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"
Je ne suis pas à l'aise à l'idée de redémarrer automatiquement lors de la capture de l'exception :
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
car je crains que deux save() simultanés à court d'identifiants n'entraînent deux redémarrages distincts et une violation ultérieure de la contrainte unique. (essentiellement le même concept que le problème d'origine)