Documentation PostgreSQL 17.10 » Internes » Déclaration du catalogue système et contenu initial

Précédent Niveau supérieur Suivant
66.4. Transactions en deux phases Sommaire 67.1. Règles de déclaration de catalogue système

Chapitre 67. Déclaration du catalogue système et contenu initial

Table des matières

67.1. Règles de déclaration de catalogue système
67.2. Données initiales du catalogue système
67.2.1. Format de fichier de données
67.2.2. Affectation d'OID
67.2.3. Recherche de référence d'OID
67.2.4. Création automatique des types de tableau
67.2.5. Recettes pour éditer les fichiers de données
67.3. Format des fichiers BKI
67.4. Commandes BKI
67.5. Structure du fichier BKI de « bootstrap »
67.6. Exemple BKI

PostgreSQL utilise de nombreux catalogues systèmes différents pour garder la trace de l'existence et les propriétés des objets des bases de données, tels que les tables et les fonctions. Il n'y a aucune différence physique entre un catalogue système et une table utilisateur standard, mais le code C des processus clients connaît la structure et les propriétés de chaque catalogue, et peut les manipuler directement à un bas niveau. Ainsi, par exemple, il est déconseillé de tenter de modifier la structure d'un catalogue à la volée ; cela casserait de nombreuses suppositions inscrites dans le code C sur comment les lignes du catalogues sont arrangées. Mais les structures des catalogues peuvent changer entre plusieurs versions majeures.

Les structures des catalogues sont déclarées dans des en-têtes de fichiers C spécialement formatées dans le répertoire src/include/catalog/ du code source. Il existe pour chaque catalogue un fichier d'en-tête nommé d'après le catalogue (par exemple, pg_class.h pour pg_class), qui définit l'ensemble des colonnes que le catalogue a, ainsi que certaines autres propriétés basiques telles que son OID.

Beaucoup des catalogues ont des données initiales qui doivent être chargées à l'intérieur durant la phase de « bootstrap » d'initdb, pour amener le système à un point où il est capable d'exécuter des ordres SQL. (Par exemple, pg_class.h doit contenir une entrée pour lui-même, ainsi qu'autant d'entrées pour chacun des autres catalogues système et index.) Ces données initiales sont conservées dans un format éditable dans des fichiers de données qui sont également stockés dans le répertoire src/include/catalog/. Par exemple, pg_proc.dat décrit toutes les lignes initiales qui doivent être insérées dans le catalogue pg_proc.

Pour créer les fichiers de catalogue et y charger ces données initiales, un processus client fonctionnant en mode « bootstrap » lit un fichier BKI (Backend Interface) contenant les commandes et les données initiales. Le fichier postgres.bki utilisé dans ce mode est préparé à partir des en-têtes et fichiers de données susmentionnés, en même temps que la création d'une distribution PostgreSQL, par un script Perl nommé genbki.pl. Bien qu'il soit spécifique à une version précise de PostgreSQL, postgres.bki ne dépend pas de la plateforme et est installé dans le sous-répertoire share de l'arborescence installée.

genbki.pl produit également des fichiers d'en-tête dérivés pour chaque catalogue, par exemple pg_class_d.h pour le catalogue pg_class. Ce fichier contient des définitions de macro automatiquement générées, et peut contenir d'autres macros, déclarations d'énumérations, etc qui peuvent être utiles pour du code C client qui lit un catalogue en particulier.

La plupart des développeurs de PostgreSQL n'ont pas besoin de se préoccuper directement du fichier BKI, mais presque toutes les fonctionnalités non triviales ajoutées dans les processus clients nécessiteront de modifier les fichiers d'en-tête de catalogue et/ou les fichiers de données initiales. Le reste de ce chapitre donne des informations sur ce sujet, et par souci de complétude décrit le format de fichier BKI.

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