Poiché non ho ancora trovato un modo "automatizzato" per farlo, sto pensando alla seguente soluzione alternativa:sarebbe fattibile per la mia situazione particolare:
- Imposta la sequenza con un MAXVALUE 49999 NO CYCLE
- Quando viene raggiunto 49999, il prossimo save() incorrerà in un errore postgres
- Cattura quell'eccezione e rilancia come errore del modulo "hai esaurito i numeri, per favore reimposta al blocco successivo e poi riprova"
- Fornire una vista in cui l'utente può attivare il blocco successivo, ovvero eseguire "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"
Non mi sento a mio agio nel riavviare automaticamente quando si rileva l'eccezione:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
poiché temo che due save() simultanei che esauriscono gli ID porteranno a due riavvii separati e una successiva violazione del vincolo univoco. (praticamente stesso concetto del problema originale)