>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Rust

Por que reescrever o Postgres em Rust

Imagine que você decidiu reconstruir o motor de um carro clássico, mas em vez de peças originais, usa peças impressas em 3D de titânio. É mais ou menos isso que o projeto pgrust está fazendo. Desenvolvedores pegaram o Postgres 18.3 e começaram a reescrever metodicamente seus internos em Rust.

Parece loucura ou um experimento de estudante, mas os números dizem o contrário. O projeto já passa em mais de 46.000 testes de regressão do Postgres original. Não é apenas um "banco de dados inspirado", mas uma tentativa de criar um substituto binariamente compatível que entende os mesmos arquivos de dados e as mesmas consultas.

O que é este projeto

pgrust é uma reformulação completa do núcleo do PostgreSQL. A ideia principal de seu autor, malisper, é que o código C original do Postgres se tornou complexo demais ao longo de décadas para mudanças radicais. Implementar multi-threading ou novos mecanismos de armazenamento lá é uma tarefa que levaria anos de discussões em listas de discussão.

Rust aqui serve não apenas como uma "linguagem segura", mas como uma ferramenta para iteração rápida. Desenvolvedores usam assistentes de IA para acelerar a portabilidade, mas controlam rigorosamente os resultados através dos testes de referência do Postgres. Se o banco de dados original lança um erro em uma consulta SQL malformada, pgrust deve lançar exatamente o mesmo erro.

Como pgrust difere do original

A parte mais interessante está nos planos e nos protótipos já implementados. O README menciona uma nova versão que ainda não foi lançada ao público, mas os resultados são intrigantes.

Em vez do modelo clássico "um processo por conexão", que nos força a usar pgbouncer ou outros proxies, pgrust está migrando para threads. Isso imediatamente dá um grande boost em cargas de trabalho transacionais. De acordo com as medições dos autores, esta arquitetura roda 50% mais rápido que o original.

Para analytics, os números são ainda mais impressionantes: é reivindicado um speedup de 300x. Desenvolvedores estão mirando performance no nível do Clickhouse enquanto permanecem dentro da interface familiar do Postgres.

Detalhes técnicos e compatibilidade

O projeto mantém compatibilidade de disco. Você pode pegar um diretório de dados existente do Postgres 18.3 e "apontar" pgrust para ele. Ele vai pegar os arquivos e começar a funcionar.

Para compilar a partir do código fonte, você vai precisar do conjunto padrão para trabalhar com Postgres: icu4c, openssl e libpq. O processo parece familiar para desenvolvedores Rust:

PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \
cargo build --release --locked --bin postgres

Um detalhe interessante: ao iniciar, você tem que aumentar manualmente os limites de stack (ulimit -s 65520), porque algumas operações do Postgres são muito famintas por memória na stack, e o runtime do Rust se comporta de forma mais modesta por padrão.

O que vem a seguir no roadmap

O roadmap do projeto parece uma lista de desejos de todo administrador de banco de dados:

  • Pool de conexões nativo (adeus, pgbouncer).
  • Experimentos com armazenamento sem Vacuum. Se isso puder ser implementado, pgrust vai resolver um dos problemas mais "dolorosos" do Postgres.
  • Proteções contra consultas ruins. Isso é especialmente relevante agora, quando redes neurais frequentemente geram SQL sem muita preocupação com índices e planos de execução.
  • Branching rápido de dados.

Vale a pena tentar

Agora mesmo, pgrust não está pronto para produção. Os próprios autores admitem isso honestamente. Extensões como PL/Python ou PL/Tcl ainda não são suportadas, e a performance no branch público ainda não foi totalmente otimizada.

No entanto, este é um playground ideal para experimentos. Se você sempre quis fuçar nas entranhas de um SGBD mas foi desencorajado pela enorme base de código C, pgrust é sua chance. O código Rust é uma ordem de magnitude mais fácil de ler e modificar.

Você pode experimentar o projeto via Docker com um único comando:

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1

Isso vai iniciar um container com pgrust e abrir o psql padrão dentro. Para quem não quer baixar nada, há uma demo no site oficial rodando em WebAssembly, funcionando direto no navegador.

O projeto parece um dos desafios open source mais ambiciosos dos últimos tempos. Mesmo que pgrust não substitua o Postgres nos próximos anos, definitivamente se tornará um campo de testes para tecnologias que podem depois migrar para o branch principal do "elefante".

Projetos relacionados