sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag vidarebefordra en primär nyckelsekvens i Django på ett säkert sätt?

Eftersom jag inte har hittat ett "automatiserat" sätt att göra detta än, tänker jag på följande lösning - det skulle vara möjligt för min speciella situation:

  1. Ställ in sekvensen med ett MAXVALUE 49999 NO CYCLE
  2. När 49999 nås, kommer nästa save() att stöta på ett postgres-fel
  3. Fånga det undantaget och höj igen som ett formulärfel "du har slut på siffror, återställ till nästa block och försök igen"
  4. Tillhandahålla en vy där användaren kan aktivera nästa block, d.v.s. kör "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"

Jag är orolig för att göra omstarten automatiskt när jag fångar undantaget:

try:
    instance.save()
except RunOutOfIdsException:
    restart_id_sequence()
    instance.save()

eftersom jag är rädd att två samtidiga save() som tar slut på ID kommer att leda till två separata omstarter och en efterföljande överträdelse av den unika begränsningen. (i princip samma koncept som originalproblemet)



  1. Dynamisk Crystal delrapport

  2. MySQL:välja den närmaste matchningen?

  3. MySQL SLIPPA alla tabeller, ignorera främmande nycklar

  4. Konvertera en bit av SQL till en Oracle-funktion