48.5. Vérification de l'unicité de l'index

PostgreSQL™ renforce les contraintes SQL d'unicité en utilisant les index uniques, qui sont des index qui refusent les entrées multiples avec des clés identiques. Une méthode d'accès qui supporte cette fonctionnalité initialise pg_am.amcanunique à true (à présent, seul B-tree le supporte).

Grâce à MVCC, il est toujours nécessaire d'autoriser les entrées dupliquées à exister physiquement dans un index : mes entrées pourraient faire référence à des versions successives d'une même ligne logique. Le comportement que nous voulons réellement renforcer est qu'aucune image MVCC n'inclut deux lignes avec les mêmes clés d'index. Ceci crée les différents cas suivants devant être vérifiés lors de l'insertion d'une nouvelle ligne dans un index unique :

Nous réclamons que la méthode d'accès à l'index applique ces tests eux-même, ce qui signifient qu'ils doivent attendre l'en-tête pour vérifier le statut de validation d'une ligne qui est affichée comme une clé dupliquée suivant le contenu de l'index. Ceci est sans aucun doute moche et non modulaire, mais il permet d'éviter un travail redondant : si nous faisons un test séparé, alors la recherche d'index pour une ligne en conflit pourrait être essentiellement répétée lors de la découverte d'emplacement pour insérer la nouvelle entrée d'index de ligne. De plus, il n'existe aucun moyen pour éviter des conditions rares sans que la vérification de contrainte ne soit une partie intégrale d'insertion du nouvel entrée d'index.

Le principale limitation de ce schéma est qu'il n'existe pas de façon aisée de supporter les vérifications d'unicité déferrées.