PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso inoltrare in sicurezza una sequenza di chiavi primarie in Django?

Poiché non ho ancora trovato un modo "automatizzato" per farlo, sto pensando alla seguente soluzione alternativa:sarebbe fattibile per la mia situazione particolare:

  1. Imposta la sequenza con un MAXVALUE 49999 NO CYCLE
  2. Quando viene raggiunto 49999, il prossimo save() incorrerà in un errore postgres
  3. Cattura quell'eccezione e rilancia come errore del modulo "hai esaurito i numeri, per favore reimposta al blocco successivo e poi riprova"
  4. Fornire una vista in cui l'utente può attivare il blocco successivo, ovvero eseguire "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"

Non mi sento a mio agio nel riavviare automaticamente quando si rileva l'eccezione:

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

poiché temo che due save() simultanei che esauriscono gli ID porteranno a due riavvii separati e una successiva violazione del vincolo univoco. (praticamente stesso concetto del problema originale)