Pular para o conteúdo
Tecnologia

CPF sem o zero e preço virando texto: o que o PostgreSQL perde quando os dados saem do banco

Quem decide tecnologia precisa tirar tabelas do PostgreSQL para lote, análise e busca sem perder tipo nem precisão. Veja como o jsonW faz a ida e a volta com o wcon, o que o README mede e o que ainda não foi testado.

Por Equipe Wortic 9 min de leitura
CPF sem o zero e preço virando texto: o que o PostgreSQL perde quando os dados saem do banco

Na pesquisa Stack Overflow Developer Survey de 2025, 55,6% dos respondentes disseram usar PostgreSQL, contra 48,7% em 2024, e a fatia sobe para 58,2% entre os profissionais. A matéria do iMasters, de 8 de novembro de 2026, usa esses dados para separar adoção real de popularidade em rankings (matéria no Google Notícias).

Usar o banco é só o começo. Quando o dado sai dele para lote, análise, busca por significado ou auditoria, cada passagem costuma pedir outro formato, e é nessa passagem que o tipo do valor se perde.

O que muda para quem opera o banco

Na mesma semana, o mantenedor do projeto Pigsty, Ruohang Feng, descreveu uma onda de relatos de vulnerabilidade gerados por ferramentas automatizadas. Segundo a matéria, o code freeze e o empacotamento da versão 19, previstos para 9 de novembro, foram reagendados, e o Pigsty acompanha cerca de um lote de releases por semana nos últimos dois meses (matéria do iMasters sobre a versão 19).

Esta é uma leitura editorial, e não um dado da notícia: quando as atualizações chegam com mais frequência, cresce a necessidade de conferir os dados depois de cada movimento. Um formato que carrega a própria checagem de integridade, com crc32c e SHA-256 em cadeia, transforma essa conferência num comando simples.

Outra matéria do mesmo dia lembrou que o parâmetro scram_iterations fica gravado dentro de cada senha, por isso mudar a configuração não altera as senhas já criadas (matéria sobre scram_iterations). No jsonW, a senha do banco não entra no arquivo: o wcon a lê de um arquivo ou da variável PGPASSWORD, nunca da linha de comando.

Um código com zero à esquerda não sobrevive a uma exportação comum

Um código de cadastro que começa com zero pode virar número ao sair do banco e perder esse zero. Um preço guardado como texto perde a moeda, e um peso sem unidade fica ambíguo. O guia para agentes do projeto orienta a escolher o tipo pelo significado do campo: codigo para CNPJ, CPF, SKU e placa, dinheiro para valor com moeda e medida[kg] para peso.

Como o wcon leva a tabela para o .jsw e traz de volta

O wcon lê o tipo de cada coluna e escolhe o tipo jsonW que guarda o valor sem perda. Assim, numeric vira decimal exato, bigint vira i64, timestamptz, timestamp e date viram tempo em microssegundos UTC, jsonb vira qualquer, e os vetores do pgvector viram vf32 ou vf16, prontos para busca por significado. O esquema sai do próprio banco, e ninguém precisa escrevê-lo à mão.

WSQL_URL=postgresql://papel@host:5432/banco wcon pg "select * from vendas where data > now() - interval '30 days'" vendas.jsw
wjsw conferir vendas.jsw
wcon pg-gravar vendas.jsw public.vendas

A documentação oficial do PostgreSQL descreve o COPY como o comando que move dados entre tabelas e arquivos, em formato texto, CSV ou binário (documentação do COPY). Na volta, o wcon usa COPY binário, uma tabela de parada e um INSERT ... SELECT com o tipo de cada coluna, tudo numa transação só.

flowchart LR
    PG[(PostgreSQL)] --> W{{wcon pg}}
    W --> J[arquivo .jsw]
    J --> C{{wjsw conferir}}
    J --> G{{wcon pg-gravar}}
    G --> T[(tabela de destino)]
sequenceDiagram
    participant A as Aplicação
    participant W as wcon pg-gravar
    participant P as PostgreSQL
    A->>W: arquivo .jsw e tabela de destino
    W->>P: abre uma transação
    W->>P: cria tabela de parada
    W->>P: envia as linhas em COPY binário
    W->>P: INSERT ... SELECT com o tipo de cada coluna
    W->>P: confirma tudo de uma vez

O que os números do README medem, e o que não medem

  • O arquivo .jsw ficou 4,9 vezes menor que o JSONL dos mesmos dados. A medição usou 100 mil registros e comparou com o JSONL lido pelo leitor de JSON do próprio projeto.
  • Para ler um campo de uma linha, o acesso direto foi 3.281 vezes mais rápido na mesma base. O README avisa que bibliotecas de JSON mais otimizadas diminuem a diferença quando se lê e grava o arquivo inteiro.
  • Na rede, o wremoto lê um .jsw guardado em R2, S3 ou HTTP e baixa só os blocos da consulta, por HTTP Range.
  • Na ida e volta com o PostgreSQL, o projeto relata md5 igual dos dois lados nas versões 14, 16 e 18.
  • O README não traz números de custo em reais, de memória ou de carga no servidor. O comando wjsw medir faz essa medição na máquina de quem vai usar.

Se o dado só vive no banco e nunca sai dele, o ganho de formato talvez não apareça. Essa é uma hipótese para testar, não uma conclusão do projeto.

Comparação com o que se usa hoje

Formato de hojeO que se perdeCom o jsonW
CSVTipo, zero à esquerda e precisão, segundo o guia para agentesEsquema com tipos de negócio e códigos guardados byte a byte
JSON ou JSONLNão tem tipos como dinheiro ou decimal exatoEsquema de uma linha; o .jsw ficou 4,9 vezes menor que o JSONL no teste do README
ParquetO README não traz comparação de números com ParquetO README coloca o .jsw no lugar de JSONL, CSV e Parquet, em lote e busca
Banco de vetores separadoO dado é copiado para a busca por significadoVetores vf16 e vq8 ficam no próprio arquivo

Na comparação com JSON, a referência honesta é o leitor do próprio projeto: bibliotecas JSON mais rápidas fecham parte da distância na leitura completa.

Liberdade funcional e permissão dentro do formato

A permissão fica no esquema, e não espalhada pelo código da aplicação. No exemplo do README, a recepção e o financeiro de uma clínica veem partes diferentes do mesmo arquivo:

paciente:texto,cpf:codigo?+pessoal,valor:dinheiro+escopo(financeiro),data:tempo,tenant:dic

Sem o escopo, a coluna sai nula. Sem o tenant da credencial, a linha não aparece. Quanto à licença, o uso é livre dentro dos produtos e em quantos servidores o cliente quiser, mas o jsonW não pode ser revendido como serviço nem ter o núcleo submetido a engenharia reversa.

A biblioteca e os SDKs não acessam a rede. Na primeira execução, o wjsw envia só a versão e a plataforma, e a variável JSONW_SEM_PING=1 desliga esse envio.

Limites que a decisão precisa considerar

O wcon e o wremoto rodam em macOS e Linux, e no Windows só pelo WSL. Com MySQL 8, a conexão aceita por enquanto só o mysql_native_password. Os binários Linux exigem glibc 2.34 ou superior. A versão 19 do PostgreSQL ainda não aparece nos testes publicados no README.

Passo a passo para testar com o seu PostgreSQL

Antes de instalar, leia a página oficial do formato, em jsonw.org, e o repositório no GitHub.

  1. Baixe o binário da sua plataforma na pasta bin do repositório.
  2. Guarde a senha em PGPASSWORD ou no arquivo ~/.pgpass. Nunca a coloque na URL.
  3. Exporte uma tabela de teste com wcon pg e veja o esquema com wjsw info.
  4. Confira a custódia com wjsw conferir. A saída deve trazer as linhas e os blocos conferidos com sha256 e crc32c.
  5. Grave numa tabela vazia com wcon pg-gravar, confira de novo e compare uma consulta antes e depois.
  6. Rode wjsw medir na sua máquina antes de decidir com base em leitura e disco.

Fontes

Perguntas frequentes

O jsonW substitui o PostgreSQL?

Não. O jsonW não pede que você troque de banco. O wcon leva os dados do PostgreSQL para um arquivo .jsw e os devolve sem perda.

Preciso reescrever o esquema da minha tabela para usar o jsonW?

Não. O esquema sai do próprio banco, porque o wcon lê o tipo de cada coluna e escolhe o tipo jsonW que guarda o valor sem perda.

Funciona com o PostgreSQL 19?

O README relata testes com as versões 14, 16 e 18, com md5 igual dos dois lados. Não encontrei teste publicado para a versão 19. Antes de usar em produção, rode a conferência na versão que você tem.

O jsonW é gratuito?

Ele é livre para usar dentro dos seus produtos, em quantos servidores quiser, segundo a licença de uso sustentável. Não é permitido revender o jsonW como serviço nem fazer engenharia reversa do núcleo.

O jsonW envia os meus dados para algum servidor?

A biblioteca e os SDKs não acessam a rede. Na primeira execução, o comando wjsw envia só a versão e a plataforma. A variável JSONW_SEM_PING=1 desliga esse envio.

Quanto o jsonW é mais rápido que o JSON?

No teste do README, com 100 mil registros, ler um campo de uma linha ficou 3.281 vezes mais rápido que no JSONL lido pelo leitor do próprio projeto. Bibliotecas JSON mais otimizadas reduzem a diferença quando se lê o arquivo inteiro. Meça na sua máquina com o comando wjsw medir.

Onde fica a senha do banco quando uso o wcon?

Ela vem de um arquivo ou da variável PGPASSWORD, e nunca da linha de comando, da URL ou da saída, segundo o README.

Dá para usar o jsonW no Windows?

O wjsw tem binário para Windows. O wcon e o wremoto, que conectam aos bancos, rodam em macOS e Linux, e no Windows só pelo WSL.

Fontes

Conheça: jsonW com PostgreSQL: ida e volta sem perda pelo COPY binário.

Quer isso funcionando na sua empresa?

Um consultor da Wortic olha o seu caso e mostra o caminho, sem compromisso.

Falar com um consultor

Equipe editorial

Equipe editorial da Wortic especializada em automacao, IA, ERP, CRM e crescimento operacional.

  • Automacao com IA
  • Gestao empresarial
  • CRM
  • ERP
  • Marketing digital

Isso funcionando no seu negócio.

Um consultor mostra o sistema do seu ramo, com a IA dentro.