Índice
O PostgreSQL usa muitos catálogos do sistema diferentes para controlar a existência e as propriedades de objetos de banco de dados, como tabelas e funções. Fisicamente não há diferença entre um catálogo do sistema e uma tabela de usuário simples, mas o código C do processo servidor conhece a estrutura e as propriedades de cada catálogo, podendo manipulá-lo diretamente em um nível baixo. Assim, por exemplo, não é aconselhável tentar alterar a estrutura de um catálogo em tempo real; isso quebraria as suposições construídas no código C sobre como as linhas do catálogo são dispostas. Mas a estrutura dos catálogos pode mudar entre versões principais.
As estruturas dos catálogos são declaradas em arquivos de cabeçalho
C especialmente formatados no diretório
src/include/catalog/
da árvore do código-fonte.
Para cada catálogo há um arquivo de cabeçalho com o nome do catálogo
(por exemplo, pg_class.h
para
pg_class
), que define o conjunto de colunas
que o catálogo possui, bem como algumas outras propriedades básicas,
como seu OID.
Muitos dos catálogos possuem dados iniciais que devem ser carregados
neles durante a fase de “bootstrap” (autoinício) do
initdb, para levar o sistema a um ponto
em que seja capaz de executar comandos SQL.
(Por exemplo, pg_class.h
deve conter uma entrada
para si mesmo, bem como uma para cada outro catálogo e índice do sistema.)
Esses dados iniciais são mantidos em formato editável em arquivos de
dados que também são armazenados no diretório
src/include/catalog/
.
Por exemplo, pg_proc.dat
descreve todas as linhas
iniciais que devem ser inseridas no catálogo pg_proc
.
Para criar os arquivos do catálogo e carregar esses dados iniciais neles,
um processo servidor rodando em modo bootstrap
lê o arquivo BKI (Backend
Interface) contendo comandos e dados iniciais.
O arquivo postgres.bki
usado nesse modo é preparado
a partir dos arquivos de cabeçalho e de dados mencionados acima, durante
a construção de uma distribuição do PostgreSQL,
por um script Perl chamado
genbki.pl
.
Embora seja específico para uma versão específica do
PostgreSQL, o arquivo
postgres.bki
é independente de plataforma, sendo
instalado no subdiretório share
da árvore de
instalação.
O arquivo genbki.pl
também produz um arquivo de
cabeçalho derivado para cada catálogo, por exemplo,
pg_class_d.h
para o catálogo
pg_class
.
Esse arquivo contém definições de macro geradas automaticamente e
pode conter outras macros, declarações de enum e assim por diante
que podem ser úteis para o código C do cliente
que lê um catálogo específico.
A maioria dos desenvolvedores do PostgreSQL não precisa se preocupar diretamente com o arquivo BKI, mas quase qualquer adição de recurso não trivial no processo servidor exigirá a modificação dos arquivos de cabeçalho do catálogo e/ou arquivos de dados iniciais. O restante desse capítulo fornece algumas informações sobre isso e, para completar, descreve o formato do arquivo BKI.