Introdução: Postgres: A Trajetória da Jornada até a Modernidade
O Postgres, outrora um forasteiro, trilhou um caminho surpreendente até a popularidade. Não se originou de milhões de dólares em financiamento de VC, nem teve um time de evangelistas DevRel fazendo propaganda por ele. Apenas começou e evoluiu. Recentemente, o Postgres celebrou 25 anos como um projeto de código aberto. Com o lançamento iminente do Postgres 16 nos próximos meses, é o momento perfeito para relembrarmos sua jornada até o presente.
As Origens do Postgres: Uma Transformação Gradual
- Confiabilidade e segurança para seus dados
- Abundância de recursos excepcionais
- Ausência de proprietário central, eliminando o aprisionamento
- Mais do que “apenas um banco de dados”, é uma plataforma de dados
As raízes do Postgres remontam ao projeto Ingres, que começou na Universidade da Califórnia em Berkeley como Ingres (INteractive Graphics REtrieval System), sob a orientação de Michael Stonebraker. Posteriormente, a direção mudou, e o projeto passou a financiar um banco de dados relacional.
A linguagem original era QUEL, não SQL. A ANSI oficialmente demonstrou preferência pelo SQL em 1986, direcionando muitos projetos relacionais nessa rota. O suporte ao SQL foi incorporado em 1995, com o lançamento do Postgres95.
Em 1996, o desenvolvimento saiu do ambiente acadêmico, e a primeira versão do PostgreSQL (versão 6.0) foi lançada. A Equipe Global de Desenvolvimento do PostgreSQL foi formada, mantendo o mesmo grupo de liderança desde então.
A base do MVCC (Controle de Concorrência Multiversão) que é a sua definição, foi liberada em 1999 com o Postgres 6.5.
A Evolução do Postgres
Atualmente, muitos recursos que consideramos garantidos ao trabalhar com um banco de dados confiável foram resultados de um processo contínuo. No ano 2000, o Postgres deu início à sua trajetória de amadurecimento. Pode-se até imaginar o comunicado de imprensa dizendo: “Postgres se JUNTA às fileiras de outros bancos de dados com suporte a chaves estrangeiras e junções.”
A década de 2000 trouxe peças fundamentais adicionais, com foco em um banco de dados confiável e suporte ao SQL. Isso resultou em recursos como:
- Write-Ahead-Log (WAL)
- Junções externas
- TOAST
- Mais de 4 bilhões de transações
- Remoção de colunas
- Esquemas
- IPv6 (foi pioneiro nisso)
O que é fascinante ao observar detalhes de 2000 é a presença de nomes que ainda são pilares na comunidade. Essas pessoas variam de meu colega Tom Lane a Josh Berkus, Bruce Momjian, Hiroshi Inoue e Peter Eisentraut.
As contribuições não se limitam apenas a commits. Em eventos como a PgCon ou PGConfEU, ainda vemos muitas das mesmas pessoas presentes na Cúpula de Aniversário do PostgreSQL em 2006, incluindo Magnus Hagander, Stephen Frost, Bruce Momjian, Devrim Gunduz, Oleg Bartunov, David Fetter, Robert Treat, Simon Riggs, Joe Conway, Tom Lane, Andrew Dunstan, Dave Page, Jean-Paul Argudo e muitos outros (peço desculpas caso tenha omitido alguém; você pode me corrigir pessoalmente na próxima conferência).
Ned Lilly afirmou em 2000: “Todos envolvidos com o Postgres estão muito otimistas quanto às perspectivas. Não é difícil para eles visualizar uma oportunidade de mercado. A Oracle é monolítica, então não é difícil imaginar [sucesso]. A onda dos bancos de dados de código aberto está começando a se consolidar.”
É impossível dizer se essa afirmação estava correta, mas é indiscutível que o Postgres tem um lugar sólido no mercado. Se não fosse pela combinação entre Heroku e suporte JSON, os grandes players não teriam adotado o Postgres.
O Postgres Continua a Crescer
Apesar do surgimento de bifurcações do Postgres, ele continuou avançando em sua trajetória.
Postgres 9.0 e 9.1 – 2010: O Começo da Modernização
Nessa fase, o Postgres começou a se tornar “descolado”. Suporte para funcionalidades como listen/notify (publicação e assinatura pelo banco de dados) e hstore (um tipo de dado chave-valor) mostraram que o Postgres não se encaixava no molde dos tradicionais bancos de dados relacionais. A atualização foi simplificada com o suporte para pg_upgrade. A chegada dos índices GIN e GiST proporcionou mais do que os comuns índices B-Tree.
As extensões sempre fizeram parte do Postgres, mas passaram a estar mais acessíveis aos usuários após reformas na integração. O Postgres foreign data wrapper também foi desenvolvido, permitindo a conexão entre bancos de dados distintos.
Abraçando a Modernidade
Por volta de 2005, o Postgres se mostrava um banco de dados confiável, com um suporte a transações mais rico, amplo suporte a SQL e recursos como melhorias em WAL e VACUUM. O Postgres passou a ser confiável para cargas de trabalho de produção, embora ainda houvesse espaço para melhorias na facilidade de uso.
Nessa época, começaram a surgir diversos recursos com temas distintos:
- Criação concorrente de índices
- Servidores de espera ativa
- Melhorias na linguagem de consulta
- Diversos tipos de dados, incluindo Arrays, UUID, ENUM e XML
- Dois phase commit (compromisso de duas fases)
- Um sistema de funções mais amplo
Embora as mesmas pessoas estivessem envolvidas desde os primeiros dias, outros começaram a contribuir com recursos-chave. Algumas tendências se destacaram: suporte a SQL e melhor desempenho, tornando o Postgres um banco de dados extensível com novos tipos de dados. As capacidades de relatórios poderosos se destacaram, especialmente com a introdução de funções de janela e CTEs no Postgres 8.4, lançado em 2009.
O Impacto no Ecossistema de Dados
Nessa época, o Postgres começou a influenciar o ecossistema de dados mais amplo, o que impactou empresas e produtos que dependiam dele.
A Era JSON: Transformando o Paradigma
O Postgres despertou o interesse da comunidade em 2012 com o aumento da popularidade dos bancos de dados NoSQL. Em 9.2, o Postgres começou a oferecer suporte ao JSON, embora inicialmente em campos de texto. Dois anos depois, em 2014, o Postgres 9.3 introduziu o tipo de dados JSONB, uma representação binária do JSON em disco, que possibilitou a criação de índices GIN de forma mais eficiente.
O Postgres provou ser mais do que apenas um banco de dados para desenvolvedores de aplicativos. A decodificação lógica (logical decoding) abriu caminho para anos de captura de mudanças de dados (CDC) mais fácil. A possibilidade de atualizar exibições materializadas permitiu casos de uso mais avançados de relatórios. A adição do suporte ao PostgreSQL no Amazon RDS em 9.3 também causou grande impacto e empolgação.
Continuando a Evolução: Postgres 9.5, 9.6, 10 – 2016
A partir desse ponto, começaram a surgir melhorias consistentes de desempenho e aprimoramentos contínuos nas funcionalidades existentes do Postgres. O JSONB recebeu suporte para atualizações inline, e a execução paralela se tornou mais presente. Alguns destaques incluem:
- Segurança em nível de linha (row level security)
- Replicação lógica
- Particionamento de tabelas
Nesse período, começamos a ver o envolvimento mais direto de empresas, que investiam em áreas específicas do dessa ferramenta. A EnterpriseDB focou na compatibilidade com Oracle, a 2ndQuadrant no desenvolvimento de replicação, a Postgres Pro no aprimoramento do JSONB e a Crunchy Data na segurança e na abordagem nativa de nuvem.
Extensões: Um Novo Crescimento
As extensões do Postgres são como bibliotecas, que alteram o comportamento do Postgres sem afetar o código principal. O Postgres sempre incluiu extensões contrib, algumas das quais se tornaram amplamente utilizadas, como o hstore (armazenamento chave-valor). Além disso, o pg_stat_statements passou por melhorias significativas, tornando-se uma das extensões mais valiosas do Postgres.
Além das extensões contrib, o PostGIS evoluiu em paralelo com o Postgres, transformando-o no banco de dados geoespacial mais poderoso e rico em recursos do mundo. PostGIS trouxe novos operadores, funções e tipos de dados. O surgimento de extensões inovadoras, como HyperLogLog, e empresas construídas em torno do Postgres, como Citus e Timescale, marcaram um período de renascimento.
A Conclusão: Uma História de Modernização
Em essência, ele talvez sempre tenha sido o mesmo de hoje, um banco de dados confiável e sólido. Ainda assim, novidades momentâneas podem capturar nossa atenção por um curto período, mas é o Postgres que retorna como a escolha estável após mais de 20 anos.
Em sua trajetória, a parceria com a Heroku e o suporte JSON desempenharam papéis importantes. Hoje, ainda surpreende muitos saber que ele oferece suporte ao JSON há mais de uma década.
Seu suporte rico a SQL, melhorias contínuas de desempenho e flexibilidade na manipulação de dados o tornam uma opção irresistível.
Acima de tudo, o crédito vai para os desenvolvedores e colaboradores que, frequentemente de forma anônima, contribuíram para o transformar em uma peça de software sólida.