Protože jsem ještě nenašel "automatizovaný" způsob, jak to udělat, přemýšlím o následujícím řešení - v mé konkrétní situaci by to bylo možné:
- Nastavte sekvenci s MAXVALUE 49999 NO CYCLE
- Když je dosaženo 49999, při příštím save() dojde k chybě postgres
- Zachyťte tuto výjimku a znovu ji uveďte jako chybu formuláře „došla vám čísla, resetujte prosím na další blok a zkuste to znovu“
- Poskytnout zobrazení, kde může uživatel aktivovat další blok, tj. provést „ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999“
Nelíbí se mi automatické restartování při zachycení výjimky:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
protože se obávám, že dvěma souběžným save() dojdou ID, což povede ke dvěma samostatným restartům a následnému porušení jedinečného omezení. (v podstatě stejný koncept jako původní problém)