O sistema de gerenciamento de banco de dados objeto-relacional, hoje em dia conhecido por
PostgreSQL (e por um breve período de tempo chamado Postgres95), é considerado assim por implementar um conjunto de recursos adicionais ao tradicional modelo SGBDR. Dentre os quais podemos destacar:
- Herança;
- Tipos de Dados;
- Funções.
Sem perder as funcionalidades intrínsecas ao mundo dos bancos de dados relacionais (gatilhos, restrições, regras, papéis, integridade de transações, etc..). Aliás, existe muita inconsistência filosófica sobre esta definição em relação ao PostgreSQL. Enquanto alguns autores afirmam que o PostgreSQL, por apresentar algumas funcionalidades/recursos do modelo de orientação a objetos, pode ser considerado um sistema gerenciador de banco de dados orientado a objetos; existem tantos outros que afirmam que o banco não possui características suficientes para ser considerado como tal.
O fato é que nenhum dos dois conceitos parecem estar completamente
corretos. Segundo o
The PostgreSQL Global Development Group (2002, p. 01), "estas funcionalidades colocam o PostgreSQL dentro da categoria de banco de dados referida como objeto-relacional. Repare que é diferente daqueles referidos como orientados a objetos que, em geral, não são muito adequados para apoiar as linguagens tradicionais de banco de dados relacional. Portanto, embora o PostgreSQL possua algumas funcionalidades de orientação a objetos, está firmemente ligado ao mundo dos bancos de dados relacionais. Na verdade, alguns bancos de dados comerciais incorporaram recentemente funcionalidades nas quais o PostgreSQL foi pioneiro.".
Dentre os vários recursos presentes no PostgreSQL, que atualmente
chega a sua
versão BETA 8.0 e, que pode ser instalado tanto em ambiente operacional MS Windows quanto GNU/Linux/Unix,
obtido livremente via internet, podemos destacar:
- Valida usuários e senhas: Suporte a papéis;
- Segurança contra falhas: Identificador interno de Rollback;
- Chaves primárias e estrangeiras: Recurso importantíssimo, suportado apenas recentemente pelo MySQL por exemplo;
- Bloqueia registros apenas a serem atualizados: Não indisponibiliza toda a base ou tabela de dados, apenas os registros ativos quando do acesso simultâneo;
- Triggers: Suporte a gatilhos;
- Transações: Commit, rollback, níveis de isolamento;
- Constraints (suporte parcial): Chave primária e chave estrangeira, com capacidade de habilitar/desabilitar ou dropar/adicionar;
- Program: Criar triggers, extensões da linguagem SQL;
- Fail Safe: Após excluir 1% de "N" linhas, realizar commit, desligar o sistema sem shutdown;