Maison >base de données >tutoriel mysql >Comment le délai de report affecte-t-il l'application des contraintes de clé unique/primaire dans PostgreSQL ?
Différer les contraintes de clé unique/primaire : enquêter sur le délai de report
Dans PostgreSQL, les contraintes de clé unique et primaire peuvent être définies comme étant reportables ou non. reportable. Le report des vérifications de contraintes offre une plus grande flexibilité, permettant aux modifications des données de se produire avant que la contrainte ne soit appliquée.
Délai d'application
Lorsqu'une contrainte est marquée comme reportable, son délai d'application dépend sur son réglage initial (IMMEDIATE ou DIFFÉRÉ) et sur toute modification ultérieure à l'aide de SET CONSTRAINTS. Voici le résumé :
Exemple d'analyse
Examinons la requête donnée :
UPDATE tbl SET id = t_old.id FROM tbl t_old WHERE (t.id, t_old.id) IN ((1,2), (2,1));
Cette MISE À JOUR fonctionne sur plusieurs lignes, violant potentiellement la contrainte de clé primaire unique. Cependant, cela réussit car la contrainte est définie comme DIFFÉRABLE INITIALEMENT IMMÉDIATE. Conformément aux règles ci-dessus, cela signifie que la vérification des contraintes a lieu une fois l'instruction terminée, permettant ainsi l'application des modifications.
Comportement CTE
CTE modifiant les données, comme vu dans l’exemple, se comportent de la même manière. Bien que l'ordre des mises à jour soit imprévisible au sein du CTE, la vérification des contraintes est toujours appliquée après l'exécution de l'ensemble du CTE.
Instructions UPDATE multiples
Lorsque plusieurs instructions UPDATE sont exécutée au sein d'une seule transaction, la vérification des contraintes dépend de l'utilisation ou non de SET CONSTRAINTS. Sans SET CONSTRAINTS, les vérifications ont lieu après chaque instruction, ce qui pourrait entraîner des violations uniques, comme prévu.
Distinction de clé unique/primaire
Il est important de noter que et les contraintes de clé primaire reçoivent un traitement spécial dans PostgreSQL. Les contraintes de clé unique/primaire non différables sont vérifiées après chaque commande, mais PostgreSQL conseille de les définir comme différées avec INITIALEMENT IMMEDIATE pour un comportement conforme aux normes.
Conclusion
Alors que le comportement des contraintes de clé unique/primaire différées peut différer des attentes dans certains scénarios, ce n'est pas nécessairement un bug. Le report des vérifications de contraintes offre une flexibilité dans la modification des données, et comprendre leur calendrier d'application est crucial pour optimiser les performances et éviter les erreurs inattendues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!