Тъй като все още не съм намерил "автоматизиран" начин да направя това, обмислям следното решение - би било осъществимо за моята конкретна ситуация:
- Задайте последователността с MAXVALUE 49999 NO CYCLE
- Когато се достигне 49999, следващият save() ще изведе postgres грешка
- Уловете това изключение и повдигнете отново като грешка във формуляра „свършихте номерата, моля, нулирайте към следващия блок, след което опитайте отново“
- Предоставете изглед, където потребителят може да активира следващия блок, т.е. изпълни „ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999“
Не ми е удобно да правя автоматично рестартиране при улавяне на изключението:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
тъй като се страхувам, че две едновременни save() изчерпват идентификаторите, ще доведат до две отделни рестартирания и последващо нарушение на уникалното ограничение. (по принцип същата концепция като оригиналния проблем)