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) é derivado do pacote POSTGRES escrito na Universidade da Califórnia em Berkeley. Com mais de uma década de desenvolvimento por trás, o PostgreSQL é o mais avançado banco de dados de código aberto disponível em qualquer lugar, oferecendo controle de concorrência multi-versão, suportando praticamente todas as construções do SQL (incluindo subconsultas, transações, tipos definidos pelo usuário e funções), e dispondo de um amplo conjunto de ligações com linguagens procedurais (incluindo C, C++, Java, Perl, Tcl e Python).
A implementação do SGBD POSTGRES começou em 1986. Os conceitos iniciais para o sistema foram apresentados em The design of POSTGRES, e a definição do modelo de dados inicial apareceu em The POSTGRES data model. O projeto do sistema de regras nesta época foi descrito em The design of the POSTGRES rules system. Os princípios básicos e a arquitetura do gerenciador de armazenamento foram detalhados em The design of the POSTGRES storage system.
O Postgres passou por várias versões desde então. A primeira "versão de demonstração" do sistema ficou operacional em 1987, e foi exibida em 1988 na Conferência ACM-SIGMOD. A versão 1, descrita em The implementation of POSTGRES, foi liberada para alguns poucos usuários externos em junho de 1989. Em resposta à crítica ao primeiro sistema de regras (A commentary on the POSTGRES rules system), o sistema de regras foi re-projetado (On Rules, Procedures, Caching and Views in Database Systems) e a versão 2 foi liberada em junho de 1990, contendo um novo sistema de regras. A versão 3 surgiu em 1991 adicionando suporte a múltiplos gerenciadores de armazenamento, um executor de consultas melhorado, e um sistema de regras de reescrita reescrito. Para a maior parte, as versões seguintes até o Postgres95 (veja abaixo) focaram a portabilidade e a confiabilidade.
O POSTGRES tem sido usado para implementar muitas aplicações diferentes de pesquisa e produção, incluindo: sistema de análise de dados financeiros, pacote de monitoramento de desempenho de turbina a jato, banco de dados de acompanhamento de asteróides, banco de dados de informações médicas, além de vários sistemas de informações geográficas. O POSTGRES também tem sido usado como ferramenta educacional em diversas universidades. Por fim, a Illustra Information Technologies (posteriormente incorporada pela Informix, que agora pertence à IBM) pegou o código e comercializou. O POSTGRES se tornou o gerenciador de dados principal do projeto de computação científica Sequoia 2000 no final de 1992.
O tamanho da comunidade de usuários externos praticamente dobrou durante o ano de 1993. Começou a ficar cada vez mais óbvio que a manutenção do código do protótipo e seu suporte estava consumindo grande parte do tempo que deveria ser dedicado às pesquisas sobre banco de dados. Em um esforço para reduzir esta sobrecarga de suporte, o projeto do POSTGRES de Berkeley terminou oficialmente com a versão 4.2.
Em 1994, Andrew Yu e Jolly Chen adicionaram um interpretador da linguagem SQL ao POSTGRES. O Postgres95 foi em seguida liberado para a Web para encontrar seu caminho no mundo como descendente de código aberto do código original do POSTGRES de Berkeley.
O código do Postgres95 era totalmente escrito em ANSI C e reduzido em tamanho em 25%. Muitas mudanças internas melhoraram o desempenho e a facilidade de manutenção. O Postgres95 versão 1.0.x era 30-50% mais rápido que o POSTGRES versão 4.2, utilizando o Wisconsin Benchmark. Além da correção de erros, as principais melhorias foram as seguintes:
A linguagem de consultas PostQUEL foi substituída pelo SQL (implementado no servidor). As subconsultas não foram permitidas até o PostgreSQL (veja abaixo), mas podiam ser simuladas no Postgres95 por meio de funções SQL definidas pelo usuário. As agregações foram re-implementadas. O suporte para a cláusula GROUP BY das consultas também foi adicionado. A interface da libpq permaneceu disponível para os programas escritos na linguagem C.
Além do programa monitor, um novo programa (psql) foi disponibilizado para consultas SQL interativas utilizando o Readline do GNU.
A nova biblioteca cliente libpgtcl suportava clientes baseados no Tcl. A shell pgtclsh permitia que os novos comandos Tcl interfaceassem as aplicações Tcl e o servidor Postgres95.
A interface para objetos grandes foi refeita. A Inversão de objetos grandes era o único mecanismo para armazená-los (O sistema de arquivos Inversão foi removido).
O sistema de regras no nível de instância foi removido. As regras ainda estavam disponíveis por meio de regras de reescrita.
Um breve tutorial introduzindo as funcionalidades regulares da linguagem SQL, assim como as do Postgres95, foi distribuído junto com o código fonte.
O utilitário make do GNU (no lugar do make do BSD) foi utilizado para a geração. Além disso, o Postgres95 podia ser compilado com o GCC sem correções (o alinhamento de dados para a precisão dupla foi corrigido).
Em 1996 ficou claro que o nome "Postgres95" não resistiria ao teste do tempo. Foi escolhido então um novo nome, PostgreSQL, para refletir o relacionamento entre o POSTGRES original e as versões mais recentes com funcionalidade SQL. Ao mesmo tempo, foi mudado o número da versão para começar em 6.0, colocando os números na seqüência original começada pelo projeto POSTGRES de Berkeley.
A ênfase durante o desenvolvimento do Postgres95 era identificar e compreender os problemas existentes no código do servidor. Com o PostgreSQL, a ênfase foi mudada para a melhoria das funcionalidades e dos recursos, embora o trabalho continuasse em todas as áreas.
As principais melhorias no PostgreSQL incluem:
O bloqueio no nível de tabela foi substituído por um sistema de concorrência multi-versão, permitindo os que estão lendo continuarem a ler dados consistentes durante a atividade de escrita, possibilitando efetuar cópias de segurança utilizando o pg_dump enquanto o banco de dados se mantém disponível para consultas.
A implementação de funcionalidades importantes no servidor, incluindo subconsultas, padrões, restrições e gatilhos.
A incorporação de funcionalidades adicionais compatíveis com a linguagem SQL92, incluindo chaves primárias, identificadores entre aspas, conversão implícita de tipo de cadeias de caracteres literais, conversão explícita de tipos e inteiros binários e hexadecimais.
Os tipos nativos foram aperfeiçoados, incluindo vários tipos para data e hora, e suporte adicional para tipos geométricos.
A velocidade geral do código do servidor foi melhorada em aproximadamente 20-40%, e o tempo de inicialização do servidor foi reduzido em 80% desde que a versão 6.0 foi liberada.