Table des matières
Ce chapitre définit l'interface entre le cœur du système de PostgreSQL et les méthodes d'accès aux index, qui gérent chaque type d'index. Le système principal ne sait rien des index en dehors de ce qui est spécifié ici. Il est donc possible de développer des types d'index entièrement nouveaux en écrivant du code supplémentaire.
Tous les index de PostgreSQL sont
techniquement des index secondaires ; c'est-à-dire
que l'index est séparé physiquement du fichier de la table qu'il décrit. Chaque index
est stocké dans sa propre relation physique et est donc décrit
par une entrée dans le catalogue pg_class
. Le contenu d'un
index est entièrement contrôlé par la méthode d'accès à l'index. En
pratique, toutes les méthodes d'accès aux index les divisent en pages de
taille standard de façon à utiliser le gestionnaire de stockage
et le gestionnaire de tampon pour accéder au contenu de l'index. (De plus,
toutes les méthodes existantes d'accès aux index utilisent la disposition
de page standard décrite dans Section 67.6 et la plupart
ont le même format pour les en-têtes de ligne de
l'index ; mais ce ne sont pas des obligations pour toutes les méthodes d'accès.)
Dans les faits, un index est une correspondance entre certaines valeurs de données clés et les identifiants des lignes (tuple identifiers, ou TIDs), dans leurs différentes versions, dans la table parente de l'index. Un TID consiste en un numéro de bloc et un numéro d'élément dans ce bloc (voir Section 67.6). L'information est suffisante pour récupérer une version d'une ligne particulière à partir de la table. Les index n'ont pas directement connaissance de l'existence éventuelle, à cause du MVCC, de plusieurs versions de la même ligne logique ; pour un index, chaque ligne est un objet indépendant qui a besoin de sa propre entrée. En conséquence, la mise à jour d'une ligne crée toujours de nouvelles entrées dans l'index pour cette ligne, même si les valeurs de la clé ne changent pas. (Les lignes HOT sont une exception ; mais les index ne s'en occupent pas). Les entrées d'index pour les lignes mortes sont nettoyées (par le VACUUM) lorsque les lignes mortes elles-même sont nettoyées.