PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment puis-je transférer une séquence de clé primaire dans Django en toute sécurité ?

Comme je n'ai pas encore trouvé de moyen "automatisé" de le faire, je pense à la solution de contournement suivante - ce serait faisable pour ma situation particulière :

  1. Définir la séquence avec un MAXVALUE 49999 NO CYCLE
  2. Lorsque 49999 est atteint, le prochain save() rencontrera une erreur postgres
  3. Attrapez cette exception et relancez comme une erreur de formulaire "vous n'avez plus de nombres, veuillez réinitialiser au bloc suivant puis réessayez"
  4. Fournir une vue dans laquelle l'utilisateur peut activer le bloc suivant, c'est-à-dire exécuter "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"

Je ne suis pas à l'aise à l'idée de redémarrer automatiquement lors de la capture de l'exception :

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

car je crains que deux save() simultanés à court d'identifiants n'entraînent deux redémarrages distincts et une violation ultérieure de la contrainte unique. (essentiellement le même concept que le problème d'origine)