O que é o pgrust

O pgrust e um projeto open source que reimplementa o PostgreSQL em Rust, a linguagem de programação conhecida por segurança de memoria e performance de baixo nível. O marco mais recente - e que virou noticia - e que o pgrust esta passando em 100% dos testes de regressão oficiais do PostgreSQL.

Os testes de regressão do Postgres são a suite de compatibilidade mais rigorosa que existe para um banco de dados relacional open source. Passar em todos eles significa que o pgrust consegue executar as mesmas queries, retornar os mesmos resultados e se comportar da mesma forma que o Postgres original em C.

Isso e tecnicamente impressionante porque o PostgreSQL e um projeto de mais de 30 anos com milhões de linhas de código em C, cheio de comportamentos sutis e casos de borda que foram acumulando ao longo do tempo.

Como funciona

O pgrust não e um wrapper ou proxy na frente do Postgres - e uma reimplementação do zero em Rust. O projeto usa as mesmas interfaces de protocolo (wire protocol), o mesmo dialeto SQL e o mesmo modelo de tipos do PostgreSQL original.

A estratégia e implementar o banco de dados de baixo para cima: primeiro o parser SQL, depois o planner de queries, depois o executor e o sistema de armazenamento. Cada camada e validada contra os testes oficiais do Postgres antes de avançar.

Rust foi escolhido porque oferece segurança de memoria sem garbage collector - o mesmo nível de controle que C, mas sem os erros clássicos de buffer overflow e use-after-free que afetam sistemas escritos em C ao longo do tempo.

💡
Dica

Para entender a importância dos testes de regressão do Postgres, pense neles como um contrato: qualquer banco de dados que passe em todos eles e um substituto valido para o Postgres em produção.

Principais recursos

O pgrust foca em compatibilidade total com o PostgreSQL. Os recursos já implementados incluem:

  • Wire protocol completo: clientes que usam libpq, psycopg2, pg ou qualquer driver Postgres standard conseguem se conectar ao pgrust sem modificação.
  • Compatibilidade SQL: todas as queries que rodam no Postgres devem rodar no pgrust com os mesmos resultados, validado pelos testes de regressão.
  • Segurança de memoria nativa: por ser Rust, categorias inteiras de vulnerabilidades comuns em sistemas C são eliminadas pelo compilador antes do código rodar.
  • Base para otimizações futuras: com a compatibilidade estabelecida, o projeto pode explorar melhorias de performance que seriam muito arriscadas de fazer no código C original.

O projeto e open source no GitHub e aceita contribuições. Ainda esta em desenvolvimento e não e recomendado para produção, mas o marco dos 100% nos testes e um sinal de maturidade técnica significativa.

Como começar: testar o pgrust

O pgrust pode ser compilado a partir do código fonte. Você vai precisar do Rust instalado (via rustup) e das dependências de sistema do PostgreSQL.

Passo 1: instale o Rust via rustup se ainda não tiver.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

Passo 2: clone o repositório e compile.

git clone https://GitHub.com/malisper/pgrust
cd pgrust
cargo build --release

Passo 3: para rodar os testes de regressão do Postgres contra o pgrust, consulte o README oficial do repositório para as instruções atualizadas, pois o processo pode variar conforme o projeto evolui.

⚠️
Atenção

O pgrust e um projeto experimental e de pesquisa. Não use em produção ainda - o objetivo atual e compatibilidade e explorar o espaço de design, não substituir o Postgres em ambientes críticos.

Exemplo prático: conectar com psycopg2

Um dos pontos mais interessantes do pgrust e que, por implementar o mesmo wire protocol, clientes normais do Postgres conseguem se conectar sem nenhuma modificação. Exemplo com Python:

import psycopg2

# Conectar ao pgrust exatamente como faria com o Postgres
conn = psycopg2.connect(
    host="localhost",
    port=5432,
    dbname="meu_banco",
    user="usuário",
    password="senha"
)

cursor = conn.cursor()
cursor.execute("SELECT version();")
result = cursor.fetchone()
print(result)

cursor.close()
conn.close()

Esse nível de compatibilidade e o que permite que os testes de regressão oficiais do Postgres rodem contra o pgrust sem modificação - eles usam os mesmos drivers e protocolos que qualquer aplicação real usaria.

Para desenvolvedores acostumados com o ecossistema Postgres, a curva de aprendizado para experimentar o pgrust e praticamente zero. Você já conhece o SQL, já conhece os drivers, já conhece as ferramentas.

Comparação com alternativas

O pgrust não e o único projeto explorando reimplementações de bancos de dados em Rust. Cada um tem um enfoque diferente:

  • pgrust: foco em compatibilidade total com o PostgreSQL. Meta: ser um substituto drop-in com os benefícios de segurança do Rust.
  • RisingWave: banco de dados de stream processing compatível com Postgres, escrito em Rust, mas com foco em queries em tempo real sobre streams de dados.
  • CeresDB / OpenDAL: projetos do ecossistema Rust para armazenamento, mas sem foco em compatibilidade com Postgres.
  • Néon: Postgres como serviço com arquitetura separada de storage e compute, ainda em C mas com ideias similares de modernização do internals do Postgres.

O diferencial do pgrust e justamente a meta de compatibilidade total. Não e um banco de dados novo inspirado no Postgres - e o Postgres, reescrito.

🚀
Pro tip

Acompanhe o projeto no GitHub e veja os issues abertos. E uma ótima oportunidade para contribuir com um banco de dados de código aberto em Rust - e aprender muito sobre internals de banco de dados no processo.

Pontos positivos e limitações

O que impressiona: o pgrust chegou a 100% de compatibilidade nos testes de regressão, o que é uma barreira técnica enorme. Isso valida a abordagem e prova que é possível reimplementar um banco de dados maduro como o Postgres em Rust sem perder compatibilidade.

Limitações reais: o projeto e criado e mantido por uma pessoa (conforme descrito no repositório). Isso limita a velocidade de desenvolvimento e aumenta o risco de abandono. Além disso, ainda esta longe de ser usado em produção - faltam recursos como replicação, alta disponibilidade e garantias de durabilidade testadas em campo.

Performance ainda não foi o foco principal - o objetivo atual e compatibilidade. Os benchmarks comparativos com o Postgres original em C ainda não foram publicados de forma abrangente.

Casos de uso reais

Hoje o pgrust serve principalmente para:

  • Pesquisa e aprendizado: quem quer entender como um banco de dados relacional funciona por dentro tem uma implementação moderna em Rust para estudar, com o benchmark de compatibilidade do Postgres como guia.
  • Explorar otimizações: pesquisadores podem experimentar com novas estruturas de dados e algoritmos de execução de queries sem arriscar a base de código do Postgres original em C.
  • Testes de compatibilidade: o pgrust pode ser útil para validar que uma aplicação realmente segue o padrão SQL do Postgres, sem depender de comportamentos específicos da implementação em C.
  • Contribuição open source em Rust: e um projeto excelente para quem quer aprender Rust contribuindo com algo concreto e tecnicamente desafiador.

Dicas e boas práticas

💡
Dica

Se quiser experimentar o pgrust, comece compilando e rodando os testes de regressão do Postgres contra ele. E a melhor forma de entender o que já funciona e o que ainda esta em desenvolvimento.

💡
Dica

Leia o código fonte do pgrust se quiser aprender sobre internals de banco de dados. O código Rust e mais legível do que o C do Postgres original para quem não tem experiência com o projeto histórico.

🔴
Cuidado

Não confunda "passa nos testes de regressão" com "pronto para produção". Durabilidade, replicação e comportamento sob carga são dimensões que os testes de regressão não cobrem completamente.

Para quem quer contribuir: comece pelos issues marcados como "good first issue" no GitHub. O projeto e aberto a contribuições e a revisão de um banco de dados em Rust e uma experiência técnica valiosa.

Vale a pena acompanhar?

Para quem usa Postgres em produção: acompanhe de longe por enquanto. O pgrust e promissor mas ainda não e candidato a substituição em ambientes críticos. Quando (e se) tiver replicação e garantias de durabilidade validadas, ai muda o cenário.

Para desenvolvedores interessados em Rust ou internals de banco de dados: sim, vale muito a pena estudar o projeto. E uma das implementações mais completas de um banco de dados maduro em Rust que existe, com o benchmark de compatibilidade mais rigoroso possível.

O marco dos 100% nos testes de regressão e significativo porque mostra que reimplementar o Postgres em Rust e factível. A próxima pergunta e se a comunidade vai se engajar para levar o projeto além da fase de pesquisa.