Documentation PostgreSQL 12.22 » Internes » Définition de l'interface des méthodes d'accès aux index
Précédent Niveau supérieur Suivant
Chapitre 60. Définition de l'interface des méthodes d'accès aux tables Sommaire 61.1. Structure basique de l'API pour les index

Chapitre 61. Définition de l'interface des méthodes d'accès aux index

Table des matières

61.1. Structure basique de l'API pour les index
61.2. Fonctions des méthode d'accès aux index
61.3. Parcours d'index
61.4. Considérations sur le verrouillage d'index
61.5. Vérification de l'unicité par les index
61.6. Fonctions d'estimation des coûts d'index

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 69.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 69.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.

AltStyle によって変換されたページ (->オリジナル) /