7. Programação do Lado Servidor no PostgreSQL

Atualmente, os SGBD-R são muito mais do que apenas sistemas de armazenamento e gerenciamento de dados, correspondendo a verdadeiras plataformas de desenvolvimento de sistemas com funcionalidades que vão muito além da simples execução de comandos SQL (DDL ou DML). Sistemas como Oracle, IBM DB2 e PostgreSQL são verdadeiros frameworks de desenvolvimento de aplicações.

Em comum, esses SGBDs permitem construir funções ou procedimentos que são armazenados dentro do próprio SGBD1 e que são capazes de executar tarefas com alto grau de complexidade. Essas funções podem ser expressas em linguagens de programação tradicionais, como C, Java, Python ou até mesmo em R. No entanto, a maneira mais usual de expressarmos essas funções é através de linguagens procedurais baseadas em dialetos SQL, como as linguagens PL/pgSQL do PostgreSQL e a PL/SQL da Oracle.

Outra funcionalidade disponível nesses SGBDs é a definição de ações que sejam invocadas automaticamente sempre que modificarmos o conteúdo de uma tabela. Essas ações ou triggers são expressas, em geral, da mesma forma que os procedimentos armazenados, em um dialeto SQL2.

Porém, uma das capacidades menos exploradas nos cursos de bancos de dados, mas fundamental para o desenvolvimento de certos tipos de aplicações, como as geográficas, é a de criação de extensões do SGBD. As extensões funcionam como uma espécie de plugin, possibilitando a inclusão de novos tipos de dados, novas funções e operadores sobre esses novos tipos, extensão dos mecanismos de indexação existentes para os novos tipos e, integração de bibliotecas de software construídas em outras linguagens. No caso do PostgreSQL este mecanismo é responsável por possibilitar a criação da extensão geográfica PostGIS.

Este capítulo irá mostrar como criar novas funcionalidades para um servidor de bancos de dados PostgreSQL. Começaremos pela criação de funções escritas em PL/pgSQL que serão executadas dentro do processo do servidor de bancos de dados, quando invocadas por aplicações clientes. Em seguida, iremos trabalhar com a criação de triggers, que servirão ao propósito de materializar relacionamentos espaciais entre objetos geográficos. Por fim, iremos explorar um dos mecanismos mais poderosos do PostgreSQL, que é a sua capacidade de criação de extensões.

Notas

1

Essas funções são chamadas de Procedimentos Armazenados ou Funções Definidas pelo Usuário (User Defined Functions ou UDF).

2

No PostgreSQL é possível criar triggers usando a Linguagem C.