- PGlite é uma solução leve que permite executar localmente um banco de dados Postgres completo em ambiente WASM
- Com menos de 3 MB quando compactado, pode ser executado facilmente no navegador ou em ambientes cliente
- Inclui recursos integrados de carregamento de dados, sincronização e consultas em tempo real, permitindo processamento de dados reativo
- Suporta carregamento dinâmico de extensões, incluindo pgvector, permitindo aproveitar diversos módulos de extensão
- Por meio do database.build, baseado na Supabase, é possível criar e implantar bancos de dados Postgres com IA, aumentando a flexibilidade do desenvolvimento de bancos de dados na web
Visão geral
- PGlite é um banco de dados Postgres embarcado executado em ambiente WASM (WebAssembly)
- É possível rodar uma instância completa do Postgres localmente
- Suporta processamento de dados reativo e sincronização em tempo real
Principais características
- Leveza: oferece uma build completa do Postgres com menos de 3 MB em Gzip
- Pode ser executado em navegadores e ambientes cliente leves
- Extensibilidade: permite adicionar diversos recursos de extensão do Postgres por meio de um mecanismo de carregamento dinâmico de extensões
- Suporte nativo à extensão pgvector
- Responsividade: inclui recursos integrados para carregamento de dados, sincronização e consultas em tempo real
- Adequado para atualizações de dados em tempo real e para criar aplicações reativas
Teste e uso
- Na plataforma database.build, é possível criar e publicar bancos de dados Postgres baseados em PGlite
- Ferramenta com IA criada pela Supabase, que permite ao usuário gerar seu próprio banco de dados
- É possível executar diretamente no navegador uma instância Postgres do PGlite
- Inclui pgvector
- Extensões adicionais podem ser testadas no ambiente playground (REPL)
Significado
- O PGlite leva os recursos do Postgres ao nível do navegador, tornando possível executar bancos de dados com foco no cliente
- Ao combinar leveza, extensibilidade e responsividade, vem ganhando destaque como uma solução de banco de dados adequada para o desenvolvimento de aplicações web de próxima geração
2 comentários
Vi esta matéria e resolvi adotar o PGlite experimentalmente no meu projeto. Para testes simples, ele realmente é muito rápido e muito bom. Fico animado com o que vem por aí.
Opiniões no Hacker News
Trabalho na equipe do PGlite. Fico feliz em vê-lo apresentado no HN de novo
Recentemente passamos de 3 milhões de downloads semanais e em breve devemos chegar a 4 milhões — veja a página do pacote no npm
Originalmente ele foi criado para ser embutido em apps web, mas agora o uso em ferramentas de desenvolvimento e ambientes de CLI está crescendo de forma explosiva. Google Firebase e Prisma também embutiram o PGlite em suas respectivas CLIs para emular produtos de servidor
Quero dizer algo como DuckDB ou sql.js-httpvfs, lendo blocos de uma URL remota via range requests
Nosso laboratório também está trabalhando em um projeto como esse, mas o ecossistema de http-vfs ainda está em nível de protótipo, então quase não existem bibliotecas otimizadas
Também tenho curiosidade se o padrão de acesso a disco do PostgreSQL seria mais adequado para http-vfs do que o do SQLite
Se for, seria realmente incrível se ele suportasse o protocolo de rede para poder ser usado também em ambientes de CI de linguagens além de JS
Fico curioso se o objetivo é ser uma alternativa ao SQLite ou ao DuckDB
Eu gostaria de usar o PGlite em runtimes que não sejam JavaScript
Por exemplo, embutido numa CLI em Go com um runtime WASM, como substituto do SQLite
Pelo issue #89, parece haver bindings de terceiros para Rust, mas tenho curiosidade se há planos de oferecer suporte oficial a bindings para outras linguagens
O PGlite é excelente. Estou usando como um servidor PostgreSQL dentro do navegador para desenvolvimento
O servidor implementa o protocolo do PG e, quando o cliente se conecta, encaminha as queries para o navegador, onde o PGlite roda internamente
No fim, isso faz com que um servidor PG completo dentro do navegador funcione — dbfor.dev
Este projeto é muito interessante. Um dos pontos fracos do Postgres é que sempre é preciso configurar um servidor, e isso resolve esse problema
Fico curioso se existe uma forma de compilar isso como uma biblioteca nativa. Parece que parte do código poderia ser reaproveitada
Tenho curiosidade sobre as diferenças entre PGlite e SQLite
Eu usei principalmente SQLite em ambientes embarcados e no lado cliente do navegador
A vantagem do SQLite é a simplicidade, mas os vários recursos de extensão do PGlite são interessantes. Queria entender quais são as diferenças centrais entre os dois bancos
Você pode rodar testes rapidamente com SQLite, mas se a infraestrutura real for PostgreSQL, o valor disso fica limitado
Em testes unitários ainda estou usando TestContainers para rodar Postgres baseado em Docker
Mas alternativas como esta também tornaram possíveis ferramentas de teste em Python como py-pglite
Ainda assim, eu confio mais em algo como o pgserver, em que o Postgres real pode ser executado de forma leve como pacote pip
Minha opinião é apenas do ponto de vista de testes unitários
Nossa equipe adotou o PGlite no ambiente de testes ao criar um novo serviço interno
Montamos um wrapper para usar o PGlite nos testes e uma instância de Postgres na execução real, e isso foi muito bem-sucedido
Em especial, com o recurso
.clone()é possível criar checkpoints do banco e restaurar o estado inicial em cada testeTambém ficou muito fácil rodar 50 suítes de teste em paralelo
Estou usando para testes, e parece um meio-termo entre SQLite em memória e uma instância completa de Postgres
Eu procurava algo assim havia muito tempo, e estou satisfeito com a melhora na velocidade dos testes. Até agora quase não encontrei limitações
Também existe o Doltgres, um Postgres em formato de executável único
Assim como no Deno, basta baixar e executar um único arquivo
.exee o Postgres já funciona — documentação de instalação do Doltgres