Application des contraintes de clé primaire DEFERRABLE ou IMMEDIATE
L'application d'une contrainte de clé primaire ou unique différée/différée dans PostgreSQL dépend de son paramètres et le type d'opération en cours.
Pour les contraintes définies comme DÉFERRABLE INITIALEMENT IMMÉDIATE, l'unicité est vérifiée après l'exécution de chaque instruction SQL. Cependant, il est important de noter que pour les contraintes UNIQUE ou PRIMARY KEY, le manuel indique que les contrôles d'unicité se produisent immédiatement après chaque commande, quel que soit le paramètre de déférabilité.
L'exemple fourni dans la requête démontre qu'une instruction UPDATE la modification de plusieurs lignes est autorisée à réussir même si la contrainte est définie comme PRIMARY KEY DEFERRABLE INITIALLY IMMEDIATE. En effet, la vérification a lieu après l'exécution de l'instruction et, dans ce cas, la contrainte est toujours satisfaite.
En revanche, un CTE modifiant les données qui tente de mettre à jour les lignes de plusieurs tables peut échouer si la contrainte PK est pas différé. En effet, chaque sous-instruction du CTE est exécutée simultanément et sans isolation d'instantané, l'ordre des mises à jour n'est pas prévisible. En conséquence, une violation de clé unique peut se produire.
Si plusieurs instructions UPDATE sont exécutées dans une seule transaction sans définir explicitement les contraintes comme différées, une violation UNIQUE peut se produire si la contrainte n'est pas différée. En effet, les vérifications sont effectuées après chaque instruction et la contrainte peut être violée lors des états intermédiaires de la transaction.
Par conséquent, il est évident que le comportement des contraintes UNIQUE ou PRIMARY KEY non différées dans PostgreSQL est essentiellement imparfait. Les vérifications sont effectuées après chaque mise à jour de ligne, ce qui peut entraîner des échecs inattendus dans certains scénarios. Cependant, la solution de contournement à ce problème consiste à utiliser une contrainte DEFERRABLE, qui offre plus de flexibilité dans l'application de l'unicité et peut éviter des erreurs inutiles.
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!