Chapter 63. Definición de la interfaz del método de acceso a índices

Table of Contents

63.1. Estructura básica de la API para índices
63.2. Funciones del método de acceso a índices
63.3. Escaneo de índices
63.4. Consideraciones sobre el bloqueo de índices
63.5. Comprobaciones de unicidad de índices
63.6. Funciones de estimación de costos de índices

Este capítulo define la interfaz entre el sistema central de PostgreSQL y los métodos de acceso a índices (index access methods), que gestionan los tipos de índices individuales. El sistema central no sabe nada sobre los índices más allá de lo que se especifica aquí, por lo que es posible desarrollar tipos de índices completamente nuevos escribiendo código adicional.

Todos los índices en PostgreSQL son lo que técnicamente se conoce como índices secundarios; es decir, el índice está físicamente separado del archivo de la tabla que describe. Cada índice se almacena como su propia relación física y, por lo tanto, se describe mediante una entrada en el catálogo pg_class. El contenido de un índice está completamente bajo el control de su método de acceso a índices. En la práctica, todos los métodos de acceso a índices dividen los índices en páginas de tamaño estándar para poder utilizar el gestor de almacenamiento y el gestor de búfer ordinarios para acceder al contenido del índice. (Todos los métodos de acceso a índices existentes utilizan además la disposición de página estándar descrita en Section 66.6, y la mayoría utiliza el mismo formato para las cabeceras de tuplas de índice; pero estas decisiones no son obligatorias para un método de acceso).

Un índice es efectivamente un mapeo de algunos valores clave de datos a los identificadores de tuplas, o TIDs, de las versiones de fila (tuplas) en la tabla padre del índice. Un TID consta de un número de bloque y un número de elemento dentro de ese bloque (consulta Section 66.6). Esta información es suficiente para recuperar una versión de fila concreta de la tabla. Los índices no saben directamente que bajo MVCC puede haber múltiples versiones existentes de la misma fila lógica; para un índice, cada tupla es un objeto independiente que necesita su propia entrada de índice. Por lo tanto, una actualización de una fila siempre crea entradas de índice completamente nuevas para la fila, incluso si los valores clave no cambiaron. (Las tuplas HOT son una excepción a esta afirmación; pero los índices tampoco tratan con ellas). Las entradas de índice para las tuplas muertas se recuperan (mediante el vaciado o vacuuming) cuando las propias tuplas muertas son recuperadas.