Prévia do material em texto
SISTEMA DE INFORMAÇÃO ___________________________________________________________ ALAN BREMER PALHETA CARVALHO CARLOS DIEGO DO REGO RAIOL ELIEL GOMES PANTOJA ERLON FONSECA PINHEIRO JAMMERSON DE JESUS OTAVIANO DO MONTE JOANICE LUCENA SORIA LETICIA ROSA DA COSTA POSTGRESQL ________________________________________________________ BELÉM - PA ALAN BREMER PALHETA CARVALHO CARLOS DIEGO DO REGO RAIOL ELIEL GOMES PANTOJA ERLON FONSECA PINHEIRO JAMMERSON DE JESUS OTAVIANO DO MONTE JOANICE LUCENA SORIA LETICIA ROSA DA COSTA POSTGRESQL Trabalho apresentado ao curso de Graduação Sistema de Informação, para a disciplina Bancos de Dados I na Faculdade Maurício de Nassau. Prof. Marcus de Barros Braga BELÉM/PA Abril – 2016 ALAN BREMER PALHETA CARVALHO CARLOS DIEGO DO REGO RAIOL ELIEL GOMES PANTOJA ERLON FONSECA PINHEIRO JAMMERSON DE JESUS OTAVIANO DO MONTE JOANICE LUCENA SORIA LETICIA ROSA DA COSTA POSTGRESQL Trabalho apresentado ao curso de Graduação Sistema de Informação, para a disciplina Bancos de Dados I na Faculdade Maurício de Nassau. Prof. Marcus de Barros Braga BELÉM/PA Abril - 2016 SUMÁRIO 1 INTRODUÇÃO............................................................................................ 5 1.1 HISTORIA DOS SGBDS................................................................................ 5 1.2 HISTORIA DO POSTGRESQL....................................................................... 6 2 DESCRIÇÃO DO PRODUTO.......................................................................... 7 3 CONTROLE DE ACESO............................................................................... 11 3.1 METODOSDE AUTENTICAÇÃO .................................................................. 11 3.1.1 AUTENTICAÇÃO DE CONFIANÇA........................................................... 12 3.1.2 AUTENTICAÇÃO POR SENHA................................................................. 12 3.1.3 AUTENTICAÇÃO BASEADA NA IDENTIDADE ...................................... 13 4 CONTROLE DE CONCORRÊNCIA............................................................... 15 5 SEGURANÇA................................................................................................ 16 6 SUPORTE....................................................................................................... 20 6.1 SUPORTE COMERCIAL ............................................................................... 20 6.1 SUPORTE DA COMUNIDADE ..................................................................... 20 7 MODELOS DE DADOS................................................................................. 22 7.1 MODELO RELACIONAL.............................................................................. 22 7.2 MODELO ORIENTAÇÃO A OBJETO........................................................... 24 7.3 MODELO OBJETO RELACIONAL............................................................... 26 7.4 MODELO XML................................................................................................ 28 8 COMPARAÇÃO COM OUTROS................................................................... 30 8.1 MYSQL X POSTGRESQL............................................................................. 30 8.2 POSTGRESQL X ORACLE .......................................................................... 31 8.3 POSTGRESQL X DB2 .................................................................................. 34 9 CONCLUSÃO ................................................................................................ 37 REFERÊNCIA BIBLIOGRAFIA................................................................................ 39 INTRODUÇÃO O sistema (SGBD) que iremos abordar se chama PostgreSQL (normalmente chamado como Postgres) O que é postgre? É o que chamamos de SGBDRe, ou seja, é um sistema de Gerência de Banco de dados relacional estendido e o mais importante, livre. O “R” por que ele adota uma abordagem relacional. Em um SGBD relacional, os dados estão organizados em forma de tabelas (linhas e colunas) e suas relações (chaves estrangeiras). O “e” em SGBDRe é de estendido e mostra que o PostgreSQL não está restrito a abordagem relacional. HISTÓRIA DOS SGBDS Os SGBDs apareceram nos anos 60, à medida que a capacidade e velocidade dos computadores aumentavam. São constituídos por software que é responsável pela manutenção, gestão de acessos, e organização de dados, oferecendo uma agradável abstração ao cliente, tal como mostra a figura. Figura 1 – Esquema de um SGBD, fazendo a “ponte” entre as aplicações e a base de dados HISTÓRIA DO POSTGRESQL O Postgres é constituído hoje por uma comunidade de pessoas que são responsáveis pela manutenção do sistema (site, documentação e FAQs), correção de bugs e etc. A primeira referência que há do PostgreSQL é o INGRES (INteractive Graphics REtrieval System), um projeto da Universidade de Berkeley (Califórnia) do final dos anos 70, que desenvolvia um SGBD Relacional Open Source desenhado para suportar grandes aplicações comerciais e governamentais. Em 1986, o professor Michael Stonebraker liderou o projeto POSTGRES que não era mais do que o sucessor do primeiro (“POST Ingres”). Este projeto conseguiu grandes patrocinadores fazendo com que o sistema aumentasse a sua robustez e crescesse bastante, passando a implementar um grande número de funcionalidades novas. Nos 10 anos seguintes até (1995) o postgres foi alterado inúmeras vezes com sucessivas versões tentando focar-se em portabilidade, versatilidade e fiabilidade do sistema. Em 1993 a sua comunidade duplicou. Em 1994 Andrew Yu e Jolly Chen adicionaram um interpretador da linguagem SQL ao sistema. Este feito foi de tal maneira importante que viria a mudar o nome do SGBD para POSTGRES95 ocorrendo assim correção de erros, performance e facilidade em manutenção. Esta versão foi disponibilizada na web como opensource. Em 1996 o sistema foi intitulado definitivamente como PostgreSQL, nesta versão os esforços foram canalizados para a expansão do sistema melhorado com a implementação de novos recursos. O sistema está habilitado para suprir tanto pequenos programados como empresas de grande porte. DESCRIÇÃO DO PRODUTO PostgrySQL é um sistema de gerenciador de bancos de dados objeto relacional de fonte aberto. Atualmente,PostgreSQL admite SQL92 e SQL: 1999 e oferece recursos como consultas complexas, chaves estrangeiras, triggers, views, integridade transacional e controle de concorrência de múltiplas versões. Além disso, os usuários podem estender o PostgreSQL com nove tipos de dados, funciona com diversas linguagens de programação(incluindo C,C++,java,Perl, Tcl e Python ).Talvez o ponto mais forte do PostgreSQL seja que ele,junto com MySQL,sejam os dois sistemas de banco de dados relacional de fonte aberto mais usados. A linceça do PostgreSQL é a linceça BDS,que dar permissão para qualquer um usar,modificar e distribuir o código e a documentação do PostgreSQL para qualquer finalidade gratuitamente. Foi acrescentado o interpretador de linguagem sob um novo nome, Postgres95, o sistem foi lançado na Web e mais tarde comercializado pela Ilustra Information Technologies (que depois se juntou à Informix,agora pertence a IBM.Em 1996, o nome Postgres95,foi substituido pela PostgreSQL,para refletir o relacionamento entre o Postgres original e as versões mais recentes com capacidade SQL.PostgreSQL é executado em praticamente todos os sistemas operacionais tipo Unix,incluindo Linux e Apple Macintosh OS X. PostgreSQL pode ser executando na Microsoft Windows. A versão 8.0, lancada em janeiro de 2005, oferece suporte nativo da Microsoft Windows.Hoje o PostgreSQL,é usado para implementar vários aplicativos de pesquisa e produção diferentes (como o projeto de implementação científica Sequoia 2000) e é uma ferramenta educacional em várias Universidades.Osistema continua a evoluir por meio das conribuições de uma comunidade de cerca de 1.000 desenvolvedores. O PostgreSQL é um projeto open source coordenado pelo PostgreSQL Global Development Group. Embora as atividades do grupo sejam patrocinadas por diversas organizações de todo o mundo, seu modelo de desenvolvimento é o modelo Bazar (originalmente apresentado em A Catedral e o Bazar de Eric S. Raymond). Portanto, o desenvolvimento do PostgreSQL é feito por um grupo de desenvolvedores, em sua maioria voluntários, espalhados por todo o mundo e que se comunicam via Internet. Logo, trata-se, de um projeto direcionado pela comunidade de desenvolvedores e de usuários, a qual qualquer pessoa pode se juntar, bastando se inscrever em listas de discussão e participar delas. Voluntários interessados em contribuir com o projeto também podem consultar as sugestões de tarefas de desenvolvimento de novas funções e de correções de erros que são publicadas na lista TODO ou apresentar suas próprias sugestões. O código desenvolvido é submetido à equipe do projeto que pode aceitá-lo e incluí-lo nas novas versões ou recusá-lo. Voluntários também podem colaborar gerando documentação ou realizando traduções.As ferramentas utilizadas para o apoio ao desenvolvimento são o sistema de gestão de fontes CVS (Concurrent Version System), listas de discussão, servidor de news e salas de bate-papo (IRC). Além de doações, o projeto PostgreSQL se sustenta pelo patrocínio de diversas empresas, entre as quais se destacam: Fujitsu, Hub.Org, NTT Group, Red Hat, Skype e SRA.O software tem adquirido prestígio na comunidade Linux, tendo recebido diversas vezes o prêmio Linux Journal Editor's Choice de melhor sistema de gerenciamento de banco de dados (SGBD). Uma diversidade de módulos adicionais está disponível através do pgfoundry.A aceitação do PostgreSQL tem se ampliado para além da comunidade de código aberto. Há entre os seus usuários grandes empresas internacionais, órgãos governamentais de vários países e universidades de prestígio mundial. Existe uma lista dos principais usuários no Brasil e no mundo e, também, há alguns estudos de caso de aplicações que utilizam o PostgreSQL. O usuário de login para iniciar a instalação do banco de dados necessariamentedeverá ser o usuário administrador do sistema operacional. Assim, todos os direitos de uso para os recursos necessários para a instalação estarão garantidos. Por praticidade, o PostgreSQL deve ser instalado como um serviço do sistema operacional. Caso contrário, a inicialização deverá ser feita manualmente pelas pastas dos arquivos onde o PostgreSQL foi instalado, executando o arquivo initdb. Para instalar o PostgreSQL como serviço, o instalador solicita a conta do sistema operacional que irá executar o banco de dados. Caso a conta informada não exista, o instalador pode encarregar-se de criar a conta especificada e fica a critério do usuário determinar a senha, ou deixar que ele gere uma automaticamente. Se não, o usuário deverá informar a senha da conta já existente. Ainda durante a instalação, é possível determinar que o instalador faça a inicialização do banco de dados depois de concluído o processo. Para isto, devem ser fornecidas as seguintes informações: porta de conexão, locale, codificação e a conta do usuário interno do banco de dados. A porta de conexão é aquela, onde o banco de dados irá atender as requisições de conexão dos usuários. O PostgreSQL, por default, atende as requisições na porta 5432. Ainda sobre o gerenciamento das conexões dos usuários, pode-se, durante a instalação, determinar se o banco poderá ser acessado apenas pela própria máquina, ou por outras máquinas da rede. O local e a codificação têm como objetivo configurar os acentos e os caracteres arábicos e sugere-se para estes, “Portuguese, Brazil” e “LATIN1”, respectivamente. A conta do usuário interno do banco de dados não deve ser a mesma conta do sistema operacional utilizada anteriormente para criação do serviço e a senha também não deve ser a mesma, pois caso ocorra uma invasão ao banco de dados o invasor não conseguirá facilmente invadir o sistema como um todo. Um dos principais diferenciais do banco é seu sistema de armazenamento de dados, que difere totalmente dos bancos concorrentes. O PostgreSQL possui um sistema de armazenamento baseado em cluster, que é um diretório onde todos os arquivos do banco estão armazenados. Tanto os arquivos dos dados, quanto os arquivos de configuração do banco. Outro tópico que tem destaque é a forma de como os dados são gravados no cluster. Os dados são temporariamente armazenados em um diretório do cluster que contém um conjunto de arquivos chamado WAL (Write Ahead Log). A cada modificação no conteúdo dos dados do banco, os novos dados são gravados temporariamente no WAL, que podem ter até 16 MB de tamanho. Os dados somente são transferidos do WAL para a base de dados original quando a função de checkpoint for chamada. CONTROLE DE ACESSO Com o desenvolvimento de novas aplicações nos diversos aspectos do processamento, o controle sobre as informações ficou mais importante, assim novas ideias surgiram, ideias essas, capazes de oferecer controles mais seguros para o gerenciamento dos dados. O controle de acesso aos dados deve ser feito de acordo com a necessidade de cada sistema. Como funciona a autenticação de um aplicativo? Basicamente a autenticação ocorre quando um cliente conecta-se ao servidor de banco de dados através de um usuário pré-estabelecido e criado no SGBD, a qual já está pré-estabelecido maneiras, métodos e locais de acesso, ou seja, já foi determinado em quais objetos do banco de dados este usuário tem acesso, por tanto é de fundamental importância controlar como estes usuários conectarão ao SGBD. Conceitualmente estes usuários são distintos do Sistema Operacional da máquina o que nada impede que haja correspondência entre eles, embora não seja requerido. Para controlar o acesso a informações confidenciais são necessários soluções de informações que não devem ser vistas por todos os usuários: como exemplo, uma tabela que contenha os salários dos funcionários, ou os dados de um projeto novo que esteja em fase de desenvolvimento. O PostgreSQL oferece um controle baseado em direitos de acesso ou privilégios e é através deles que um usuário pode ou não acessar um dado. A identidade do usuário é que vai determinar o conjunto de privilégios disponíveis para ele. A autenticação pode ser feita utilizando o nome do usuário e senha do sistema operacional, porém este método não é recomendado pois a segurança torna-se dependente da oferecida pelo sistema operacional. 3.1 MÉTODOS DE AUTENTICAÇÃO No próprio arquivo pg_hba.conf podemos especificar qual será o método de autenticação a ser utilizado para se conectar através deste registro. Uma vez que os registros de pg_hba.conf são examinados sequencialmente a cada tentativa de conexão, a ordem dos registros possui significado. Normalmente, os primeiros registros possuem parâmetros de correspondência de conexão mais exigentes e métodos de autenticação menos exigentes, enquanto os últimos registros possuem parâmetros de correspondência menos exigentes e métodos de autenticação mais exigentes. AUTENTICAÇÃO DE CONFIANÇA Quando for especificada a autenticação trust, o PostgreSQL assume que qualquer um que possa se conectar ao servidor está autorizado a acessar o banco de dados como qualquer usuário que seja especificado (incluindo o superusuário do banco de dados). É claro que as restrições especificadas para o usuário e para o banco de dados ainda se aplicam. Este método deve ser utilizado somente quando existe uma proteção adequada no nível de sistema operacional para as conexões ao servidor. A autenticação trust é apropriada e muito conveniente para conexões locais em estações de trabalho com um único usuário. Geralmente não é apropriada em uma máquina multiusuária. Entretanto, é possível utilizar trust mesmo em uma máquina multiusuária,embora não irei abordar como. 3.1.2 AUTENTICAÇÃO POR SENHA Os métodos de autenticação baseados em senha são md5, crypt epassword. Estes métodos operam de forma semelhante, exceto com relação à forma como a senha é enviada através da conexão, mas somente o método md5 suporta senhas criptografadas armazenadas no catálogo do sistema pg_shadow; os outros dois métodos requerem que sejam armazenadas senhas não criptografadas neste catálogo. Se houver preocupação com relação aos ataques de (sniffing) de senhas, então md5 é o método preferido, com crypt como a segunda opção se for necessário Porém este não é suportado para clientes pré-7.2. O método password deve ser evitado, especialmente em conexões pela Internet aberta (a menos que seja utilizado SSL, SSH ou outro método de segurança para proteger a conexão). As senhas de banco de dados do PostgreSQL são distintas das senhas de usuário do sistema operacional. As senhas de todos os usuários do banco de dados são armazenadas na tabela do catálogo do sistema pg_shadow. As senhas podem ser gerenciadas através dos comandos SQL CREATE USER e ALTER USER; por exemplo, CREATE USER user WITH PASSWORD 'senha';. Por padrão, ou seja, se nenhuma senha for definida, é armazenado o valor nulo para a senha e a autenticação da senha é sempre mal-sucedida para este usuário. 3.1.3 AUTENTICAÇÃO BASEADA NA IDENTIDADE O método de autenticação ident funciona obtendo o nome de usuário do sistema operacional do cliente, e determinando os nomes de usuário do banco de dados permitidos, utilizando um arquivo de mapa que lista os pares de nomes de usuários correspondentes permitidos. A determinação do nome de usuário do cliente é o ponto crítico da segurança, funcionando de forma diferente dependendo do tipo de conexão. Ao utilizar a autenticação baseada no ident, após determinar o nome de usuário do sistema operacional que iniciou a conexão oPostgreSQL verifica se este usuário pode se conectar como o usuário de banco de dados que está sendo solicitado na conexão. Isto é controlado pelo argumento do mapa de ident que segue a palavra chave ident no arquivo pg_hba.conf. Existe um mapa de ident pré-definido chamadosameuser, que permite todo usuário do sistema operacional se conectar como o usuário de banco de dados com o mesmo nome (se este existir). Os outros mapas devem ser criados manualmente. Fora o sameuser, os mapas de ident são definidos no arquivo de mapa de ident que, por padrão, se chama pg_ident.conf e é armazenado no diretório de dados do agrupamento <../data>(Entretanto, é possível colocar o arquivo de mapas outro lugar; alterando o parâmetro de configuração ident_file no arquivopostgresql.conf). A forma geral das linhas do mapa de ident é: Os comentários e os espaços em branco são tratados da mesma maneira que no arquivo pg_hba.conf. O NomeDoMapa é um nome arbitrário a ser utilizado para fazer referência ao mapa no arquivopg_hba.conf. Os outros dois campos especificam qual usuário do sistema operacional pode se conectar como qual usuário do banco de dados. O mesmo NomeDoMapa pode ser utilizado várias vezes para especificar mais mapeamentos de usuários dentro de um único mapa. Não existe restrição com relação a quantos usuários do banco de dados um determinado usuário do sistema operacional pode corresponder, nem o contrário. Assim como o pg_hba.conf o arquivo pg_ident.conf é lido na inicialização e quando o processo servidor principal (postmaster) recebe um sinal SIGHUP. Logo se o arquivo for editado com o sistema ativo, será necessário enviar este sinal para o postmaster (utilizando pg_ctlreload ou kill –HUP) para fazer o arquivo ser lido novamente, assim como foi visto no pg_hba.conf. CONTROLE DE CONCORRÊNCIA O envolvimento de diversas operações de bancos de dados dá origem ao que DATE chama de Transação, sendo esta uma unidade lógica de trabalho. Uma transação consiste na execução do programa que acessa o banco de dados e possivelmente atualiza vários itens. A integridade dos dados é garantida, se o SGBD manter o ACID, que corresponde as quatro seguintes transações: atomicidade, se ela for executada exclusivamente na sua totalidade; consistência, se sua execução fizer o banco de dados passar de um estado consistente para outro também consistente; isolamento, se uma transação não sofrer interferência de outra e durabilidade, quando as mudanças em um banco de dados não forem perdidas por uma falha. Um exemplo de transação é a instrução BEGINS que é iniciada seguida de um COMMIT ou ROLLBACK. A transação não inicia o processo no lado cliente, mas obtém uma estrutura modular, evita perda de informações, diminui o tráfego na rede e todo erro de lógica de definição de fluxo de dados são controlados e as atualizações são feitas através dos registros de bloqueios. O comando COMMIT é realizado quando uma transação é bem-sucedida ou concluída. Já o comando ROLLBACK é quando uma transação é malsucedida ou abortada, o que ocasiona um erro na operação ou falha. Um exemplo de COMMIT e ROLLBACK é a operação de uma transferência de dinheiro de uma conta para outra, contendo atualizações em cada conta, se a transferência for bem-sucedida, será um exemplo de COMMIT, caso contrário, será um ROLLBACK. É necessário que se faça ao menos duas ressalvas quando se trabalham com transações, a primeira é agregar vários comandos como sendo de uma mesma transação, como exemplo, uma transferência bancária envolvendo a retirada de dinheiro de uma conta e acréscimo em outra como se fosse apenas uma única operação lógica. A segunda é que em outras situações se faz necessário sacrificar ou flexibilizar as características ACID, com necessidade de maior desempenho. A prioridade do controle de concorrência tem por base a serialização, usando métodos de bloqueio Locks. Um meio de serializar é a obrigação do acesso aos itens de dados, onde nenhuma outra transação pode modificá-la. Mas, a técnica padrão usada no PostgreSQl é o MVCC (Mult Version Concurrence Control). A técnica MVCC é tradicionalmente usada no PostgreSQL, onde cada transação enxerga uma versão do banco de dados (SNAPSHOT). A vantagem MVCC é o não bloqueio da leitura e escrita quando ambas estão em operação, obtendo um controle e evitando perdas de dados. O PostgreSQL mantém os dados sempre coerentes através do MVCC, diferente de outros SGBD'S, evitando assim o problema de uma transação ter acesso aos dados incoerentes. No PostgreSQL também são possíveis protocolos de nível Locks de tabela e tupla para aplicações que não se adaptem bem ao funcionamento do modelo MVCC, sendo necessário estabelecer manualmente o nível de granularidade. Porém, o uso do MVCC bem cuidadoso é muito mais eficiente que o uso de Locks. Antes que uma execução seja iniciada, é atribuído um protocolo time-stamp com duas formas de funcionamento: o time-stamp, que pode ser atribuído através de atualizações do clock do sistema ou com o uso de um contador lógico sempre que uma nova transação entra no sistema. E o protocolo Multi-Versão, que cria várias cópias do mesmo item, assim, cada informação X, cria uma nova versão X e quando X é chamado para leitura, o sistema elege a versão do X mais apropriada, garantindo a serialização. SEGURANÇA O PostgreSQL é um SGBD que um dos seus pontos fortes é a segurança, sendo em muitos casos o fator determinante na escolha entre os SGBDs livres. A segurança é umas das grades preocupações da equipe de desenvolvedores do PostgreSQL: oferecer um SGBD extremamente robusto e confiável, sendo recomendado sua utilização em aplicações complexas, que exijam o controle de grandes volumes de dados, ou em casos de tratamento de informações críticas. A análise da segurança oferecida pelo PostgreSQL levará em conta fatores tidos como essenciais em um SGBD, além de outras características de funcionamento do PostgreSQL que aumentam a sua segurança. Na instalação do PostgreSQL é possível perceber que a segurança é questão primordial. Isto porque,para o seu perfeito funcionamento, a sua instalação deve ser feita em uma partição NTFS (New Technology File System), nunca em uma partição FAT (File Allocation Table) ou FAT32 (File Allocation Table para partições de até 32 GB). A vantagem de segurança de a instalação ser preferencialmente em sistemas de arquivos NTFS se deve ao fato deste possuir características que o tornam mais confiável do que os outros sistemas de arquivos, principalmente para aplicações que trabalham em rede. O controle de acesso aos dados deve ser feito de acordo com a necessidade de cada sistema. Existem informações que não devem ser vistas por todos os usuários: como exemplo, uma tabela que contenha os salários dos funcionários, ou os dados de um projeto novo que esteja em fase de desenvolvimento. O PostgreSQL oferece um controle baseado em direitos de acesso ou privilégios e é através deles que um usuário pode ou não acessar um dado. A identidade do usuário é que vai determinar o conjunto de privilégios disponíveis para ele. A autenticação dos clientes é feita através de um arquivo localizado no diretório de dados do cluster, chamado pg_hba.conf. Este arquivo é composto de vários registros, onde cada registro determina o tipo de conexão e devem ser informados valores como: o nome do banco de dados, a faixa de endereços de IP de cliente e o método de autenticação a ser utilizado nas conexões que correspondem a estes parâmetros. Com a utilização deste arquivo que armazena os registros com os parâmetros necessários às autenticações é possível, por exemplo, determinar que um banco de dados possa ser acessado somente por um determinado usuário ou conjunto de usuários, informado ao registro. É possível também especificar os endereços IP ou a faixa de endereços IP que o registro corresponde, autorizando o acesso apenas a partir desses endereços. O PostgreSQL dispõe de eficientes métodos de autenticação, dentre os quais é possível destacar: Por senha onde o principal método é o md5 (Message-Digest Algorithm 5) que suporta senhas criptografadas. As senhas, criptografadas ou não, ficam armazenadas em uma tabela do catálogo do sistema chamada pg_shadow. Kerberos implementa um protocolo de transporte de dados em rede, assegurando a comunicação dos dados mesmo em uma rede insegura. Além destes, a autenticação pode ser feita utilizando o nome do usuário e senha do sistema operacional, porém este método não é recomendado pois a segurança torna-se dependente da oferecida pelo sistema operacional. A tabela do catálogo, pg_shadow, não pode ser vista por todos, justamente por conter as senhas dos usuários. Para possibilitar que esta tabela seja vista por todos sem que as senhas sejam exibidas, o PostgreSQL utiliza uma outra tabela do catálogo chamada pg_user, que é uma visão da pg_shadow, onde o campo senha é sempre mostrado com asteriscos ao invés dos caracteres reais da senha. Para aumentar a segurança dos dados que trafegam na rede é possível criptografar as comunicações entre o cliente e o servidor através do suporte nativo a conexões SSL (Secure Sockets Layer) através da instalação do OpenSSL no cliente e no servidor. Ainda é possível criar as conexões de clientes através de túneis SSH (Secure Shell). Ao tratar da segurança oferecida pelo PostgreSQL um dos principais aspectos é o mecanismo para criação de cópias de segurança e seu restabelecimento em caso de falhas, já que devido a importância das informações contidas nos bancos de dados não pode-se correr o risco de perdê-las por uma falha de hardware, queda de luz ou qualquer outro tipo de sinistro. O PostgreSQL possui duas poderosas formas de backup que contemplam as principais necessidades deste tipo de processo. São elas: O dump é um recurso que armazena diversos comandos em um arquivo de texto que podem reconstituir os dados do banco através de comandos SQL de criação de tabelas e todos os outros comandos necessários. Pode ser feito o dump de apenas alguns registros do banco ou de todos os registros contidos no cluster, o chamado dumpall. O point-in-time recovery é capaz de reconfigurar os dados para a data e hora informada pelo DBA (Data Base Administrator). Este recurso pode ser feito pela efetiva utilização do WAL como um sistema de armazenamento de arquivos. Mesmo com esses recursos, pode ser feito backup através do sistema operacional, copiando o cluster dos dados. Todavia, esse recurso trás algumas restrições: o software deve estar fechado no momento da cópia do cluster; não é possível escolher as tabelas ou registros a serem copiados, isso quer dizer todos os dados serão copiados, inclusive arquivos de controle do próprio banco que não se relacionam com as tabelas e registros; o processo é muito mais demorado e garante muito menos a integridade dos arquivos do que os anteriores. A cópia de segurança poit-in-time recovery somente é possível devido à existência do WAL. O WAL foi criado com o intuito de evitar perda de dados em uma eventual queda do sistema, pois trabalha com pontos de verificação que são gravados sempre que uma modificação é feita. Esse referencial teórico serviu de base para a condução do estudo de caso deste trabalho, permitindo ampliar o conhecimento acerca do PostgreSQL e, juntamente com os conceitos estudados na revisão teórica, construir um conjunto de referências que podem ser bastante úteis em projetos de escolha de softwares de banco de dados nas empresas. SUPORTE O PostgreSQL tem uma ampla variedade de opções de suporte comercial e da comunidade disponível para os seus usuários. Veja abaixo a seção "Comunidade" para ver detalhes das opções disponíveis para os usuários da comunidade de PostgreSQL, incluindo listas de discussão e IRC. SUPORTE COMERCIAL Suporte comercial está disponível a partir de uma das muitas empresas que oferecem suporte profissional ao PostgreSQL. Uma lista de empresas que oferecem serviços de hospedagem com acesso ao PostgreSQL também está disponível. SUPORTE DA COMUNIDADE O PostgreSQL é bem suportado pela sua ativa comunidade. O desenvolvimento corrente é registrado no Noticiário Semanal do PostgreSQL e em mais de uma dúzia de listas categorizadas em tópicos como administração, anúncios, empregos, performance e SQL. Nós também temos vários Grupos de Usuários espalhados pelo mundo com informações sobre PostgreSQL em várias linguas. Os recursos da comunidade estão listados abaixo: Documentação FAQ (Inglês) FAQ pt_BR Artigos (Inglês) Artigos (pt_BR) Lista de Discussão PGBR-Geral (Comunidade Brasileira) Lista de Discussão PGBR-Dev (Organização da Comunidade Brasileira) Lista de Discussão PGBR-Eventos (Anúncio de Eventos da Comunidade Brasileira) Listas de Discussão Internacionais Planeta PostgreSQL Brasil (agregador de sites/blogs brasileiros) Planet PostgreSQL Internacional (agregador de sites/blogs internacional) Canal Brasileiro no IRC: #postgresql-br em irc.freenode.net Outros canais no IRC MODELOS DE DADOS E uma coleção de conceitos que são usados para descrever a estrutura de um banco de dados, isto é, dados, relacionamentos, semântica e restrições. MODELO RELACIONAL O SGBD é sustentado pelo modelo relacional, que é Matematicamente conciso, completo, anti-redundante e consistente internamente. Ainda de Acordo com Neves (2002), o banco de dados relacional é muito mais utilizado comercialmente e pode ser usado para resolver muitos problemas cotidianos. O modelo relacional surgiu devido a seguintes necessidades: aumentar a independência de dados nos sistemas gerenciadores de banco de dados; prover um conjunto de funções apoiadas em álgebra relacional para armazenamento e recuperação de dados; permitir processamento ad hoc. Este modelo foi resultado de um estudo teórico realizado por Codd (1970), tendo por base a teoria dos conjuntos e álgebra relacional. O modelo foi apresentado num artigo publicado em 1970, mas que só nos anos 80, foi implementado. Dados e suas associações são representados poruma coleção de tabelas; Não requer mecanismos de estruturação para inter-relacionar seus dados; Fortemente fundamentado na Álgebra Relacional e no cálculo relacional. Mais difundido dentre todos os modelos de dados; Exemplo: O Modelo relacional revelou-se ser o mais flexível e adequado ao solucionar os vários problemas que se colocam ao nível da concepção e implementação da base de dados. A estrutura fundamental do modelo relacional é a relação. Uma relação é constituída por um ou mais atributos (campos), que traduzem o tipo de dados a armazenar. Cada instância do esquema (linha) designa-se por uma tupla (registro). O modelo relacional implementa estruturas de dados organizadas em relações (tabelas). Porém para trabalhar com essas tabelas algumas restrições tiveram que ser impostas para evitar aspectos indesejáveis no modelo relacional, tais como, repetição de informação, incapacidade de representar parte da informação e perda de informação. Essas restrições são: integridade referencial, chaves, integridade de junções de relações. Segundo Elmasri e Navathe (2005), o modelo relacional representa o banco de dados como uma coleção de relações. Informalmente cada relação se assemelha a uma tabela de valores, ou, até certo ponto, a um arquivo de registros plano (flat file). Um modelo de dados basicamente é uma combinação de um conjunto de estruturas de dados, a tabela (ou relação); um conjunto de operadores que formam a linguagem de manipulação do banco de dados; e regras de integridade que são definidas no esquema do banco de dados, e são aplicadas nas instâncias do banco de dados. Quando uma relação é imaginada na forma de uma tabela de valores, cada linha na tabela representa uma coleção de valores de dados relacionados. No modelo relacional, cada linha de uma tabela representa um fato que corresponde geralmente a uma entidade ou a um relacionamento do mundo real. O nome da tabela o os nomes das colunas são utilizados para auxiliar na interpretação do significado dos valores em cada linha. Na terminologia formal do modelo relacional, uma linha é chamada de tupla, o título da coluna é denominado de atributo e a tabela é chamada de relação. O tipo de dado que descreve os tipos de valores que podem aparecer em cada coluna é denominado de domínio. A Figura 2 representa a terminologia citada anteriormente. Figura 2 - Representa a terminologia citada anteriormente. MODELO ORIENTAÇÃO A OBJETOS O Banco de Dados Orientado a Objetos integra o conceito de orientação a objetos com aptidões de banco de dados, oferecendo modelos diretos, atuais e intuitivos para o desenvolvimento de aplicações. Conforme Gualberto (2004, p. 2), o desenvolvimento dos Sistemas de Gerenciamento de Banco de Dados Orientado a Objetos (SGBDOO) teve origem na combinação de idéias dos modelos de dados tradicionais e de linguagens de programação orientada a objetos. Segundo Larman (2000), a Orientação a Objeto (OO) é um paradigma para o desenvolvimento de aplicações. Ela aproxima a linguagem de computadores ao mundo real, visando realizar a modelagem e codificação de uma forma mais natural. Com ela, o sistema fica organizado como uma coleção de objetos que interagem entre si. A técnica de OO propõe uma maior reusabilidade, através da eliminação de redundância de código, com consequente aumento na produtividade; melhorias na manutenabilidade, pois as modificações no código são bem localizadas e não provoca descontrole em outras partes do software; e também maior confiabilidade, devido ao encapsulamento que impede o acesso direto aos dados (atributos) dos objetos (Larman,2000). Para Larman (2000), o objeto é o conceito central da abordagem orientada a objeto(OO). Ele pode ser entendido como algo do mundo real com limites bem definidos e identidade própria. Um objeto possui atributos (dados) e operações. Quando se define um objeto conceitual a partir de um objeto do mundo real, diz- se estar fazendo uma abstração. Segundo Elmasri e Navathe (2005), objetos geralmente possuem dois componentes: estado (valor) e comportamento (operações). Portanto, ele é um tanto semelhante a uma variável de programa numa linguagem de programação, exceto pelo fato de que geralmente terá uma estrutura de dados complexa, bem como operações específicas definidas pelo programador. Objetos numa linguagem de programação OO existem somente durante a execução de um programa e são, por isso, chamados de objetos transientes. De acordo com Larman (2000), classe é um conjunto de objetos que possuem características e comportamento em comum. Por exemplo, para os objetos “Maria”, “José” e “Pedro” pode-se definir a classe “Pessoa”. Cada objeto deve ser criado antes de ser utilizado. O ato de criar um objeto é denominado instanciação. Todo objeto é instancia de uma classe. A instanciação de um objeto é feita através de um método especial denominado construtor. Todos os objetos instanciados terão a mesma estrutura de métodos e atributos de sua classe (Larman, 2000). Ainda segundo Larman (2000), os atributos de um objeto são como variáveis que armazenam dados. Por exemplo, um objeto de uma classe “Pessoa” pode conter os atributos “nome” e “pedidos”, e os valores “Maria”, “Lista de pedidos”. As operações são o que os objetos podem realizar. Para este mesmo objeto da classe “Pessoa”, pode-se ter, por exemplo, as operações “faz_pedido” e “lista_devedores”. Quando uma operação é solicitada ao objeto, diz-se que este objeto recebeu uma mensagem. Esta mensagem pode trazer consigo parâmetros, que são valores passados ao objeto que a recebe. Por exemplo, traduzindo a mensagem “pessoa. faz pedido (pedido)”, significa-se estar solicitando ao objeto “pessoa” para executar a operação “faz pedido”, passando como parâmetro o “pedido”. Conforme Larman (2000), o fato de uma classe reunir tanto as características quanto o comportamento dos objetos é chamado de encapsulamento. Assim, outros objetos só terão acesso às operações ou atributos que estiverem declarados como públicos. Dá-se o nome de polimorfismo o fato de objetos de classes diferentes reagirem de forma particular a uma mesma operação (Larman, 2000). Por exemplo, a operação “faz pedido” do objeto da classe “Pessoa Física” tem uma codificação diferente do objeto de uma classe ”Pessoa Jurídica”, embora os objetivos da operação sejam semelhantes. Um outro conceito muito importante da OO é a herança. Com ela, uma classe pode herdar todas as operações e atributos de uma outra classe, acrescentando os seus próprios atributos e operações. A classe que herdou a estrutura é chamada de subclasse, enquanto a que cedeu a estrutura chama-se superclasse. Por exemplo, a classe “Pessoa” pode ser herdada pela classe “Pessoa Física”, acrescentando atributos como “CPF”, “Data Nascimento”. Uma classe pode ter um atributo que se refere a uma outra classe. A essa referência, dá-se o nome de associação. Por exemplo, o atributo “End” de uma classe “Pessoa” pode referir a classe “Endereço”, que tenha mais atributos como “rua”, “numero”, “cidade”, “cep”, “estado”. As seções a seguir apresentam uma explicação mais detalhada dos conceitos de OO utilizados nos SGBDs. MODELO OBJETO RELACIONAL Quando os bancos de dados orientados a objetos foram introduzidos, algumas das falhas perceptíveis do modelo relacional parecem ter sido solucionadas com esta tecnologia e acreditava-se que tais bancos de dados ganhariam grande parcela do mercado. Porém hoje acredita-se que os Bancos de Dados Orientados a Objetos serão usados em aplicações especializadas, enquanto os sistemas relacionais continuarão a sustentar os negócios tradicionais nos quais as estruturas de dados baseadas em relações são suficientes. A área de atuação dos SGBDs Objeto-Relacional tenta suprir a dificuldade dos sistemas relacionais convencionais, que é o de representar e manipular dados complexos. A solução proposta é a adição de facilidades para manusear tais dados utilizando-se das facilidades SQL existentes. Para isso foi necessário adicionar:extensões dos tipos básicos no contexto SQL; representações para objetos complexos no contexto SQL; herança no contexto SQL; sistema para produção de regras. PostgreSQL Toda esta seção foi baseada em documentos extraídos do The Postgresql Global Development Group (Postgresql, 2006). O PostgreSQL é um Sistema Gerenciador de Banco de Dados Objeto Relacional (SGBDOR) desenvolvido no Departamento de Ciência da Computação da Universidade da Califórnia em Berkeley. O PostgreSQL descende do POSTGRESS, código original de Berkeley, possuindo o código fonte aberto. Fornece suporte às linguagens SQL92/SQL99, além de outras funcionalidades avançadas. O POSTGRESS foi pioneiro em muitos conceitos orientado a objeto que agora estão se tornando disponíveis em alguns bancos de dados comerciais. Os SGBDs tradicionais suportam um modelo de dados composto por uma coleção de relações com nome, contendo atributos de um tipo específico. Nos sistemas comerciais em uso, os tipos possíveis incluem número de ponto flutuante, inteiro, cadeia de caracteres, valores monetários e data. É amplamente reconhecido que este modelo não é adequado para aplicações futuras de processamento de dados. O modelo relacional substituiu com sucesso os modelos anteriores principalmente pela sua simplicidade. Entretanto, esta simplicidade tornou a implementação de certas aplicações muito difícil. O PostgreSQL oferece recursos adicionais pela incorporação de vários conceitos e funcionalidades. Dentre elas, podemos destacar: Herança (especialização e generalização) Avançado sistema de tipos de dado Funções Restrições Gatilhos Integridade da transação 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. MODELO XML Em meados da década de 1990, o World Wide Web Consortium (W3C) começou a trabalhar em uma linguagem de marcação que combinasse a flexibilidade da SGML com a simplicidade da HTML. O princípio do projeto era criar uma linguagem que pudesse ser lida por software, e integrar-se com as demais linguagens. Sua filosofia seria incorporada por vários princípios importantes: Separação do conteúdo da formatação Simplicidade e legibilidade, tanto para humanos quanto para computadores Possibilidade de criação de tags sem limitação Criação de arquivos para validação de estrutura (chamados DTDs) Interligação de bancos de dados distintos Concentração na estrutura da informação, e não na sua aparência O XML é um formato para a criação de documentos com dados organizados de forma hierárquica, como se vê, frequentemente, em documentos de texto formatados, imagens vetoriais ou bancos de dados. Pela sua portabilidade, já que é um formato que não depende das plataformas de hardware ou de software, um banco de dados pode, através de uma aplicação, escrever em um arquivo XML, e um outro banco distinto pode ler então estes mesmos dados. XML nativo, utiliza documentos XML como estrutura básica para o armazenamento de informações. Arquivos XML são usados em diversas aplicações conhecidas, principalmente na área web, entre elas está o uso no sistema de emissão da Nota Fiscal Eletrônica (NF-e). Nesse caso seu uso está relacionado à comunicação entre o sistema emissor e o Web Service do órgão validador da nota, mais especificamente a Secretaria da Fazenda. A Nota Fiscal Eletrônica (NFe) é um documento de existência exclusiva. Com relação aos outros "formatos universais para intercâmbio de dados" já propostos e experimentados, o XML apresenta diversas vantagens técnicas, mas são as vantagens não-técnicas que o tornam um tópico de tão grande importância. É um padrão "de fato" e formalmente num universo onde cada desenvolvedor e cada fabricante tem a liberdade de criar e impor seu próprio formato, a aceitação do XML tem sido vista como o seu maior trunfo tem sua origem em uma instituição de padronização das mais abertas e dinâmicas, o W3C Se baseia na experiência de sucesso do SGML, sendo considerado inclusive o "sucessor da SGML". Razões para usar o XML, Aumento de fluxo de dados entre bancos de dados tradicionais e documentos XML nos sistemas de informação atuais!. Maior eficiência (e facilidade) para converter e armazenar dados em XML. COMPARAÇÃO COM OUTROS Irei fazer uma breve comparação dos softwares de SGB com o PostegreSQL, mostrar as características de cada um e suas vantagens comparadas, atualmente existem vários desses softwares, porém o foco não é mostrar qual é o melhor desses SGBD´s mas sim mostrar as principais características de cada um e quais os melhores para se usar em determinada situação. 8.1 MYSQL X POSTGRESQL MySQL ou PostgreSQL, qual usar? Ambos são muito bons e não fazem feio diante das alternativas pagas. Além disso, possuem recursos e vantagens em comum, o que significa que, para a maioria das aplicações, ambos podem ser usados. Na verdade, o correto não é tentar descobrir qual é o melhor, mas em que situação um ou outro deve ser utilizado. O PostgreSQL é otimizado para aplicações complexas, isto é, que envolvem grandes volumes de dados ou que tratam de informações críticas. Assim, para um sistema de comércio eletrônico de porte médio/alto, por exemplo, o PostgreSQL é mais interessante, já que esse SGBD é capaz de lidar de maneira satisfatória com o volume de dados gerado pelas operações de consulta e venda. O MySQL, por sua vez, é focado na agilidade. Assim, se sua aplicação necessita de retornos rápidos e não envolve operações complexas, o MySQL é a opção mais adequada, pois é otimizado para proporcionar processamento rápido dos dados e tempo curto de resposta sem exigir muito do hardware. Se você precisa, por exemplo, de um banco de dados para armazenar o conteúdo do seu site, de seu fórum ou necessita manter um cadastro de usuários de um portal, o MySQL "serve como uma luva", pois tais aplicações não necessitam dos recursos avançados que o PostgreSQL oferece. Para escolher um destes dois SGBD, procure entender bem quais recursos sua aplicação precisa. Tente estimar o volume de dados, avalie o hardware disponível, certifique-se das funcionalidades necessárias e, posteriormente, procure por informações mais detalhadas do MySQL e do PostgreSQL. Se sua aplicação for simples - principalmente se for algo ligado à internet -, não é preciso pensar muito: o MySQL é uma escolha satisfatória, pois é facilmente encontrado em serviços de hospedagem. Todavia, há situações em que tanto o MySQL quanto o PostgreSQL serão boas escolhas. Nesses casos, é recomendável fazer testes com ambos e avaliar qual oferece mais vantagens à aplicação. 8.2 POSTEGRESQL X ORACLE Vamos começar com as principais características do SGBD Oracle As versões do Oracle Oracle se declina em diversas versões Oracle Server Standard, uma versão que compreende as ferramentas amis comuns da solução Oracle. Não se trata, no entanto, de uma versão quebrada, ou mens completa... Oracle Server Enterprise Edition As funcionalidades do Oracle Oracle é um SGBD que permite assegurar: A definição dos e a manipulação dados A coerência dos dados A confidencialidade dos dados A integralidade dos dados O backup e a restauração dos dados A gestão dos acessos competitivos Os componentes do Oracle Além do banco de dados, a solução Oracle é verdadeiramente um ambiente de trabalho constituído de diversos softwares que permitem principalmente uma administração gráfica do Oracle, de se adaptar com produtos diversos e com assistentes de criação de banco de dados e de configuração destes. Pode-se classificar as ferramentasdo Oracle de acordo com diversas categorias: As ferramentas de administração As ferramentas de desenvolvimento As ferramentas de comunicação As ferramentas de gênio software As ferramentas de ajuda à decisão As ferramentas de administração do Oracle Oracle é fornecido com numerosas ferramentas que permitem simplificar a administração do banco de dados. Entre estas ferramentas, as mais conhecidas são: Oracle Manager (SQL*DBA) NetWork Manager Oracle Enterprise Manager Import/Export: uma ferramenta que permite trocar dados entre dois bancos Oracle Ferramentas de desenvolvimento do Oracle Oracle propõe igualmente numerosas ferramentas de desenvolvimento que permitem automatizar a criação de aplicações que podem servir de interface para banco de dados. Estas ferramentas de desenvolvimento são: Oracle Designer Oracle Developer SQL*Plus: uma interface interativa para enviar solicitações SQL e PL/SQL para o banco de dados. SQL*Plus permite, principalmente, configurar o ambiente de trabalho Oracle Developper: trata-se de um pacote de produtos destinados à concepção e a criação de aplicações cliente-servidor. Ele é composto de 4 aplicações: Oracle Forms (antigamente SQL Forms) : uma ferramenta que permite interrogar o banco de dados de maneira gráfica sem conhecimento prévio da linguagem SQL. SQL*Forms permite desenvolver aplicações gráficas (janelas, formulários) que permitem selecionar, alterar e suprimir dados no banco. Oracle Reports (SQL*ReportWriter) : uma ferramenta que permite realizar estados Oracle Graphics: uma ferramenta de geração automática de gráficos dinâmicos para apresentar graficamente estatísticas a partir dos bancos de dados. Procedure Builder: uma ferramenta que permite desenvolver procedimentos, funções e pacotes. Ferramentas de programação Oracle dispõe de um grande número de interfaces (API) que permitem aos programas escritos em diversas línguas de interface com o bando de dados (chamados de pré-compiladores) formam uma família cujo nome começa por PRO*: Pro*C Pro*Cobol Pro*Fortran Pro*Pascal Pro*PLI Características de PostgreSQL PostgreSQL possui numerosas características fazendo um SGBDR robusto e potente digno dos SGBD comerciais: Interfaces gráficos (X-Windows é então necessário) para gerenciar as bandejas Bibliotecas para numerosas linguagens (chamadas frontais) para acessar os registros a partir de programas em: Java (JDBC) Langue C/C++ Perl Tcl/Tk Uma API ODBC que permite a qualquer aplicação que suporta este tipo de interface de acessar bases de dados de tipo PostgreSQL Características de PostgreSQL PostgreSQL funciona de acordo com uma arquitetura cliente/servidor, é assim constituído De um lado servidor, quer dizer uma aplicação que funciona em uma máquina que hospeda a base de dados do servidor de base de dados) capaz de tratar as solicitações dos clientes. Trata-se no caso de PostgreSQL de um programa residente em memória postmaster De outro lado cliente que deve ser instalado em todas as máquinas que necessitam acessar ao servidor de base de dados (um cliente pode eventualmente funcionar sobre o servidor dele mesmo) Os clientes (as máquinas sobre as quais o cliente PostgreSQL é instalado) que podem interrogar o servidor de bancos de dados com a ajuda de solicitações SQL. 8.3 POSTEGREDSQL X DB2 IBM DB2 Express C A IBM desenvolveu a versão gratuita utilizando os recursos de sua versão paga o DB2 UDB Express com uma configuração de pacote menor, uma vantagem que o DB2 Express-C pode lhe oferecer é realizar a migração do seu banco de dados para qualquer outra versão sem a necessidade da paralisar o aplicativo, deixando o aplicativo 100% operante utilizando uma outra tecnologia de banco de dados. Com o DB2 Express-C você pode encontrar estabilidade e flexibilidade nos diferentes sistemas operacionais e uma gama de aplicativos para gerenciar de modo ágil e fácil todos os banco de dados DB2. As limitações do DB2 são diferenciadas e mais poderosas como podemos observar abaixo: LIMITAÇÃO Capacidade de Armazenamento: Ilimitada Processadores: 2 Processadores Memória: 4 GB Sistema Operacional: Linux ou Windows O suporte às mais variadas linguagens de programação e as poucas restrições impostas aos seus recursos tornam mais fortes o seu poder de competição no mercado e um objeto de desejo entre os desenvolvedores, abaixo podemos analisar o que o DB2 Express-C pode nos proporcionar: Recursos Suportados Suporte XML Suporte .NET C/C++ Java PHP Suporte a Unix Web Services ADO e ADO.NET SQLJ SQL Embutido Gerenciamento Autônomo WebSphere Studio Application Developer Alguns profissionais DB2 gostam de dizer que o DB2 Express-C é um pequeno DB2 UDB Express, pelo motivo que quase todos os recursos são encontrados nessa versão, com exceção dos recursos abaixo: Recursos Não Suportados Warehouse Manager tools & servers Extender support DB2 Connect support Informix Data Source Replication Replication Data Capture APPC Netbios Database Partitioning Feature Connection Concentrator DB2 Geodetic Extender Query Patroller Net Search Extender pureXML DB2 Web tools Spatial Extender Client and Samples Microsoft Cluster Server support CONCLUSÃO O fato de ser um produto OPENSOURCE, sem custo de licença para nenhum uso, torna o PostgreSQL uma alternativa extremamente atraente que buscam um custo total de propriedade. Sua licença é BSD, portanto pode ser utilizado, modificado e distribuído por qualquer pessoa ou empresa para qualquer finalidade, sem encargo, em quaisquer dos sistemas operacionais suportados. Ela suporta um número grande de interfaces de programação como ODBC, JAVA (JDBC), Phyton e outros. Este SGBD está avançando em passos largos devido a um grande grupo de desenvolvedores talentosos na internet e tende a crescer cada vez mais, com isso, tornando uma via para sistemas complexos, porém de alto custo como Oracle e SQL Server. Segue abaixo algumas empresas que utilizam o PosgreSQL como seus banco de dados: Fujitsu, Apple, RedHat, Sun entre outros. REFERÊNCIA BIBLIOGRAFIA SOLBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de Banco de Dados. 3. ed. São Paulo: Makron Books, 1999. MARCHI, K. R. C. Controle de Concorrência: Banco de Dados II. Universidade Paranaense. Disponível em: <http://kessia.blogs.unipar.br/files/2009/07/controle-de-concorrencia.pdf>. Acesso em: 15 abr. 2016. RODRIGUEZ, Fabio Telles. Segurança no PostgreSQL – Parte I: “A Saga”. Disponivel em:< http://savepoint.blog.br/tag/security/>. 23 de mar de 2016. RODRIGUEZ, Fabio Telles. Sql injection. Disponivel em: <https://wiki.postgresql.org/wiki/Sql_injection>. 23 de mar de 2016. LIMA, C.; SCHROEDER, R. M. R. S. Uma ferramenta para conversão de esquemas conceituais e para esquemas lógicos xml. In: IV ESCOLA REGIONAL DE BANCO DE DADOS, 2008. pp. 109-118. SCHROEDER, R.; MELLO, R. S. Análise de abordagens para modelagem conceitual e lógica xml. In: III ESCOLA REGIONAL DE BANCO DE DADOS, 2007. p.144–153. NOGUEIRA, Admilson. UML. 2005. Disponível em <http://www.imasters.com.br/artigo/3636>. Acesso em 20 de Abr de 2016. ROCHA, A. R. R. et al. Unified Modeling Language. 2001. Disponível em <http://www.dei.unicap.br/~almir/seminarios/2001.1/5mno/uml/>. Acesso em 20 de Abr de 2016. Alecrim, Emerson. Banco de dados MySQL e PostgreSQL. Disponível em: http://www.infowester.com/postgremysql.php Acesso em 20 de Abr de 2016. --------------. Comunidade Brasileira de Postgresql: Suporte. Diponivel em: <https://www.postgresql.org.br/suporte >. Acesso em 15 de Abr de 2016.