"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment générer des numéros de facture uniques sans écart dans PostgreSQL ?

Comment générer des numéros de facture uniques sans écart dans PostgreSQL ?

Publié le 2024-12-21
Parcourir:256

How to Generate Gap-Free Unique Invoice Numbers in PostgreSQL?

Génération de numéros de facture uniques sans lacunes dans PostgreSQL

Lorsque vous travaillez avec des systèmes nécessitant des identifiants uniques, tels que des numéros de facture, il est essentiel de s'assurer ils sont générés de manière cohérente, sans aucune lacune. Cependant, l'utilisation de méthodes traditionnelles telles que des requêtes avec des niveaux d'isolement tels que la sérialisation peut ne pas suffire.

Les séquences dans PostgreSQL ne garantissent pas des nombres sans interruption, car une restauration ou une erreur peut consommer la valeur de la séquence. Alors, comment pouvons-nous relever ce défi ?

Comprendre la génération de numéros sans écart

La génération de numéros sans écart dépend de trois facteurs clés :

  • Ne faire respecter aucune lacune dans la série
  • Plusieurs processus accédant à la génération de numéros
  • Numéros générés au moment de l'entité création

Solutions potentielles

  • Gap Acceptable Series : Si des écarts sont autorisés, l'objet Sequence d'Oracle est un objet très performant solution qui minimise les écarts résultant des échecs de processus.
  • Génération par lots avec insertion séquentielle : Pour une facture à processus unique génération, il est possible de lire le numéro de facture maximum actuel et d'attribuer progressivement des numéros à un lot de factures insérées dans une table temporaire.
  • Post-génération des numéros : Si la génération instantanée n'est pas requis, les numéros peuvent être générés après la création de l'entité et l'engagement de la transaction par une mise à jour d'un travail par lots ou une insertion de table séparée.

Génération sans écart avec plusieurs Processus

La génération de numéros sans interruption avec plusieurs processus nécessite une sérialisation minutieuse pour éviter les interruptions :

  • Utilisez une table dédiée pour stocker les valeurs actuelles au lieu d'une séquence.
  • Encapsuler la génération de numéros dans une fonction ou une procédure accessible par tous les processus.
  • Sérialiser l'accès au générateur de numéros avec DBMS_Lock pour chacun série.
  • Maintenez le verrou jusqu'à la fin de la transaction, puis libérez-le lors de la validation.
  • Différez la génération du numéro au plus tard possible.
  • Considérez l'impact des erreurs inattendues et les contre-mesures pour le retour numéros inutilisés dans le pool.
  • Explorez l'encapsulation dans les déclencheurs ou les appels d'API qui insèrent et valident automatiquement lignes.

Conclusion

Générer des séries d'ID uniques sans lacunes n'est pas toujours simple, mais cela est possible en comprenant les principes de génération de numéros et en appliquant des techniques. qui minimisent les lacunes et sérialisent efficacement l'accès au générateur de numéros.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3