Capítulo 33. Estendendo a linguagem SQL

Sumário
33.1. Como funciona a extensibilidade
33.2. O sistema de tipos de dado do PostgreSQL
33.2.1. Tipos base
33.2.2. Tipos compostos
33.2.3. Domínios
33.2.4. Pseudotipos
33.2.5. Tipos polimórficos
33.3. Funções definidas pelo usuário
33.4. Funções na linguagem de comando (SQL)
33.4.1. Funções SQL com tipos base
33.4.2. Funções SQL com tipos compostos
33.4.3. Funções SQL como fontes de tabela
33.4.4. Funções SQL que retornam conjunto
33.4.5. Funções SQL polimórficas
33.5. Funções nas linguagens procedurais
33.6. Funções internas
33.7. Funções na linguagem C
33.7.1. Carregamento dinâmico
33.7.2. Tipos base em funções na linguagem C
33.7.3. Convenções de chamada Versão-0 para funções na linguagem C
33.7.4. Convenções de chamada Versão-1 para as funções na linguagem C
33.7.5. Escrita de código
33.7.6. Compilar e ligar as funções carregadas dinamicamente
33.7.7. Argumentos de tipo composto em funções na linguagem C
33.7.8. Retorno de linhas (tipos compostos) por funções na linguagem C
33.7.9. Retorno de conjunto a partir de funções na linguagem C
33.7.10. Tipos polimórficos em argumentos e retorno
33.7.11. Exemplos de funções escritas em C
33.8. Sobrecarga de função
33.9. User-Defined Aggregates
33.10. User-Defined Types
33.11. User-Defined Operators
33.12. Operator Optimization Information
33.12.1. COMMUTATOR
33.12.2. NEGATOR
33.12.3. RESTRICT
33.12.4. JOIN
33.12.5. HASHES
33.12.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
33.13. Interfacing Extensions To Indexes
33.13.1. Index Methods and Operator Classes
33.13.2. Index Method Strategies
33.13.3. Index Method Support Routines
33.13.4. An Example
33.13.5. System Dependencies on Operator Classes
33.13.6. Special Features of Operator Classes

Nas próximas seções será mostrado como se pode estender a linguagem de comandos SQL do PostgreSQL pela adição de:

33.1. Como funciona a extensibilidade

O PostgreSQL é extensível, porque sua operação é dirigida pelo catálogo (catalog-driven). Quem está familiarizado com sistemas de banco de dados relacionais padrão com certeza sabe que estes armazenam informações sobre bancos de dados, tabelas, colunas, etc., no que é comumente conhecido por catálogos do sistema (Alguns sistemas chamam de dicionário de dados). Os catálogos são vistos pelo usuário como qualquer outra tabela, mas o SGBD armazena suas informações internas nestas tabelas. Uma diferença chave entre o PostgreSQL e os sistemas de banco de dados relacionais padrão é que o PostgreSQL armazena muito mais informação em seus catálogos: não apenas informações sobre tabelas e colunas, mas também informações sobre tipos de dado, funções, métodos de acesso, etc. Estas tabelas podem ser modificadas pelo usuário e, uma vez que as operações do PostgreSQL são baseadas nestas tabelas, isto significa que o PostgreSQL pode ser estendido pelos usuários. Em comparação, os sistemas de banco de dados convencionais só podem ser estendidos alterando os procedimentos presentes no código fonte, ou pela carga de módulos escritos pelo fornecedor do SGBD.

Além disso, o servidor PostgreSQL pode incorporar código escrito pelo usuário através de carregamento dinâmico, ou seja, o usuário especifica um arquivo contendo código objeto (por exemplo, uma biblioteca compartilhada implementando um novo tipo de dado ou função), e o PostgreSQL fará a carga deste módulo quando houver necessidade. O código escrito na linguagem SQL é ainda mais simples de ser adicionado ao servidor. Esta capacidade de modificar sua operação "em tempo de execução" (on the fly) torna o PostgreSQL especialmente indicado para a prototipação rápida de novas aplicações e estruturas de armazenamento.

SourceForge.net Logo