PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich eine Primärschlüsselsequenz in Django sicher weiterleiten?

Da ich dafür noch keine "automatisierte" Möglichkeit gefunden habe, denke ich über folgenden Workaround nach - er wäre für meine spezielle Situation machbar:

  1. Setzen Sie die Sequenz mit einem MAXVALUE 49999 NO CYCLE
  2. Wenn 49999 erreicht ist, wird beim nächsten save() ein Postgres-Fehler ausgelöst
  3. Fangen Sie diese Ausnahme ab und lösen Sie sie erneut als Formularfehler aus:"Sie haben keine Zahlen mehr, bitte setzen Sie auf den nächsten Block zurück und versuchen Sie es erneut"
  4. Stellen Sie eine Ansicht bereit, in der der Benutzer den nächsten Block aktivieren kann, d. h. "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999" ausführen kann

Ich habe Bedenken, den Neustart automatisch durchzuführen, wenn die Ausnahme abgefangen wird:

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

da ich befürchte, dass zwei gleichzeitige save()'s, die keine IDs mehr haben, zu zwei separaten Neustarts und einer anschließenden Verletzung der eindeutigen Einschränkung führen. (im Grunde das gleiche Konzept wie das ursprüngliche Problem)