Chapter 68. Declaraciones de los catálogos del sistema y contenido inicial

Table of Contents

68.1. Reglas de declaración de catálogos del sistema
68.2. Datos iniciales de los catálogos del sistema
68.2.1. Formato de los archivos de datos
68.2.2. Asignación de OID
68.2.3. Búsqueda de referencias de OID
68.2.4. Creación automática de tipos de array
68.2.5. Recetas para editar archivos de datos
68.3. Formato de archivo BKI
68.4. Comandos BKI
68.5. Estructura del archivo Bootstrap BKI
68.6. Ejemplo de BKI

PostgreSQL utiliza muchos catálogos del sistema diferentes para realizar un seguimiento de la existencia y las propiedades de los objetos de la base de datos, como tablas y funciones. Físicamente no hay diferencia entre un catálogo del sistema y una tabla de usuario normal, pero el código C del backend conoce la estructura y las propiedades de cada catálogo y puede manipularlo directamente a bajo nivel. Por lo tanto, por ejemplo, no se recomienda intentar alterar la estructura de un catálogo sobre la marcha; eso rompería las suposiciones integradas en el código C sobre cómo se disponen las filas del catálogo. Pero la estructura de los catálogos puede cambiar entre versiones principales.

Las estructuras de los catálogos se declaran en archivos de cabecera C con un formato especial en el directorio src/include/catalog/ del árbol de código fuente. Para cada catálogo hay un archivo de cabecera que lleva el nombre del catálogo (por ejemplo, pg_class.h para pg_class), que define el conjunto de columnas que tiene el catálogo, así como algunas otras propiedades básicas como su OID.

Muchos de los catálogos tienen datos iniciales que deben cargarse en ellos durante la fase de «bootstrap» (arranque) de initdb, para llevar al sistema a un punto en el que sea capaz de ejecutar comandos SQL. (Por ejemplo, pg_class.h debe contener una entrada para sí mismo, así como una para cada uno de los otros catálogos e índices del sistema). Estos datos iniciales se guardan de forma editable en archivos de datos que también se almacenan en el directorio src/include/catalog/. Por ejemplo, pg_proc.dat describe todas las filas iniciales que se deben insertar en el catálogo pg_proc.

Para crear los archivos de catálogo y cargar estos datos iniciales en ellos, un backend que se ejecuta en modo bootstrap lee un archivo BKI (Backend Interface) que contiene comandos y datos iniciales. El archivo postgres.bki utilizado en este modo se prepara a partir de los archivos de cabecera y de datos antes mencionados, durante la compilación de una distribución de PostgreSQL, mediante un script Perl llamado genbki.pl. Aunque es específico para una versión particular de PostgreSQL, postgres.bki es independiente de la plataforma y se instala en el subdirectorio share del árbol de instalación.

genbki.pl también produce un archivo de cabecera derivado para cada catálogo, por ejemplo pg_class_d.h para el catálogo pg_class. Este archivo contiene definiciones de macros generadas automáticamente, y puede contener otras macros, declaraciones de enum, etc., que pueden ser útiles para el código C del cliente que lee un catálogo en particular.

La mayoría de los desarrolladores de PostgreSQL no necesitan preocuparse directamente con el archivo BKI, pero casi cualquier adición de una característica no trivial en el backend requerirá modificar los archivos de cabecera de los catálogos y/o los archivos de datos iniciales. El resto de este capítulo proporciona cierta información al respecto y, para completitud, describe el formato de archivo BKI.