Autor: Este capítulo se originou como parte da Tese de Mestrado de Stefan Simkovics, preparada na Universidade de Tecnologia de Viena, sob a direção de O.Univ.Prof.Dr. Georg Gottlob e Univ.Ass.Mag. Katrin Seyr, Enhancement of the ANSI SQL Implementation of PostgreSQL.
Este capítulo proporciona uma visão geral da estrutura interna do servidor PostgreSQL. Após a leitura das seções que vêm a seguir, deve-se ter uma idéia de como os comandos são processados. Este capítulo não tem por objetivo fornecer uma descrição detalhada da operação interna do PostgreSQL, uma vez que um documento deste tipo seria muito extenso. Em vez disso, este capítulo tem por objetivo ajudar o leitor entender a seqüência geral das operações que ocorrem dentro do servidor, do ponto em que o comando é recebido ao ponto em que os resultados são retornados para o cliente.
Nesta seção é dada uma visão geral resumida dos estágios pelos quais o comando tem que passar para chegar ao resultado.
Deve ser estabelecida uma conexão entre o programa aplicativo e o servidor PostgreSQL. O programa aplicativo transmite um comando para o servidor, e aguarda para receber de volta os resultados transmitidos pelo servidor.
O estágio de análise verifica o comando transmitido pelo programa aplicativo com relação à correção da sintaxe, e cria a árvore de comando.
O sistema de reescrita recebe a árvore de comando criada pelo estágio de análise, e procura por alguma regra (armazenada nos catálogos do sistema) a ser aplicada na árvore de comando. Realiza as transformações especificadas no corpo das regras.
Uma das aplicações do sistema de reescrita é a criação de visões. Sempre que é executado um comando em uma visão (ou seja, uma tabela virtual), o sistema de reescrita reescreve o comando do usuário como um comando acessando as tabelas base especificadas na definição da visão, em vez da visão.
O planejador/otimizador recebe a árvore de comando (reescrita), e cria o plano de comando que será a entrada do executor.
Isto é feito criando primeiro todos os caminhos possíveis que levam ao mesmo resultado. Por exemplo, se existe um índice em uma relação a ser varrido, existem dois caminhos para a varredura. Uma possibilidade é uma varredura seqüencial simples, e a outra possibilidade é utilizar o índice. Em seguida é estimado o custo de execução de cada um dos caminhos, e escolhido o mais barato. O caminho mais barato é expandido em um plano completo para que o executor possa utilizá-lo.
O executor caminha recursivamente através da árvore do plano, e traz as linhas no caminho representado pelo plano. O executor faz uso do sistema de armazenamento ao varrer as relações, realiza classificações e junções, avalia as qualificações e, por fim, envia de volta as linhas derivadas.
Nas seções seguintes cada um dos itens listados acima é coberto de forma mais detalhada, para dar uma compreensão melhor do controle interno e das estruturas de dado do PostgreSQL.