Como ainda não encontrei uma maneira "automatizada" de fazer isso, estou pensando na seguinte solução alternativa - seria viável para minha situação específica:
- Defina a sequência com um MAXVALUE 49999 NO CYCLE
- Quando 49999 for alcançado, o próximo save() irá se deparar com um erro postgres
- Pegue essa exceção e aumente novamente como um erro de formulário "você ficou sem números, redefina para o próximo bloco e tente novamente"
- Forneça uma visualização onde o usuário possa ativar o próximo bloco, ou seja, execute "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"
Estou desconfortável em fazer a reinicialização automaticamente ao capturar a exceção:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
como temo que dois save() simultâneos ficando sem ids levarão a duas reinicializações separadas e a uma violação subsequente da restrição exclusiva. (basicamente o mesmo conceito do problema original)