Da jeg endnu ikke har fundet en "automatiseret" måde at gøre dette på, tænker jeg på følgende løsning - det ville være muligt for min særlige situation:
- Indstil sekvensen med en MAXVALUE 49999 NO CYCLE
- Når 49999 er nået, vil den næste save() løbe ind i en postgres-fejl
- Fang den undtagelse, og genrejs som en formularfejl "du er løbet tør for tal, nulstil venligst til næste blok, og prøv igen"
- Giv en visning, hvor brugeren kan aktivere den næste blok, dvs. udfør "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"
Jeg er utryg ved at genstarte automatisk, når jeg fanger undtagelsen:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
da jeg frygter, at to samtidige save()'er, der løber tør for id'er, vil føre til to separate genstarter og en efterfølgende overtrædelse af den unikke begrænsning. (grundlæggende samme koncept som det oprindelige problem)