0Pricing
SQL Academy · Aula

JSONB vs JSON: quando usar cada um

Escolha entre JSON (texto, preserva espaços em branco) e JSONB (binário, indexável, com chaves duplicadas eliminadas) para o armazenamento adequado.

JSONB vs JSON: quando usar cada um é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Dois tipos de JSON no PostgreSQL

  • JSON — armazena o texto exato fornecido
  • JSONB — formato binário decomposto, com chaves duplicadas eliminadas e possibilidade de indexação

JSON: armazenamento de texto

JSON preserva espaços em branco, a ordem das chaves e as chaves duplicadas. É analisado novamente a cada leitura. Não oferece indexação GIN. Quase nunca é a escolha certa para código novo.

INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs;     -- whatever the parser picks

JSONB: binário e indexável

JSONB:

  • Armazenado de forma decomposta → não precisa ser analisado novamente durante a leitura
  • Chaves duplicadas são agrupadas (a última prevalece)
  • A ordem das chaves não é preservada
  • Oferece indexação GIN
  • Oferece operadores avançados de caminho

Exemplo de JSONB

Uma tabela simples de eventos:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  data JSONB NOT NULL
);

INSERT INTO events (data) VALUES
  ('{"type":"login","user_id":42,"ip":"1.2.3.4"}');

Operadores de caminho

JSONB oferece operadores avançados (abordados na próxima lição):

SELECT data->'user_id'   FROM events;       -- → JSONB
SELECT data->>'user_id'  FROM events;       -- → TEXT
SELECT data #>> '{user,name}' FROM events;  -- nested text path

Contenção

O operador de JSONB mais útil: @> (contém).

SELECT * FROM events WHERE data @> '{"type":"login"}';

-- Combined with a GIN index, this is fast even on billions of rows.

Igualdade de JSONB

Dois valores JSONB são iguais quando seu conteúdo corresponde — a ordem das chaves não importa:

SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB;    -- TRUE

Conversão entre tipos

Faça conversões livremente:

SELECT '{"a":1}'::JSONB->'a';                -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a';             -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT;          -- 1 (as INT after extraction)

Quando NÃO usar JSONB

Se os dados têm uma estrutura fixa, use colunas reais:

  • Consultas mais rápidas (sem analisar documentos em cada linha)
  • Tipos e restrições fortes
  • Armazenamento menor
  • Estatísticas melhores

JSONB é excelente quando a estrutura varia ou evolui rapidamente.

Modelagem híbrida

Prática recomendada: use colunas estruturadas para campos estáveis e JSONB para extras variáveis:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL,
  event_type TEXT NOT NULL,
  user_id BIGINT,
  extra JSONB NOT NULL DEFAULT '{}'::JSONB
);

Validação

JSONB armazena qualquer JSON válido. Para restrições estruturadas, use restrições CHECK ou imponha o esquema na camada da aplicação:

ALTER TABLE events
  ADD CONSTRAINT data_has_type CHECK (data ? 'type');

Recapitulação

JSONB é melhor que JSON em quase todos os casos de produção.

  • JSONB: binário, indexado e com caminhos rápidos
  • JSON: apenas preservação fiel do texto
  • Use JSONB para estruturas variáveis e colunas reais para estruturas fixas

Verificação rápida

Você está projetando uma tabela nova para armazenar documentos JSON enviados pelos usuários, que serão consultados pelo conteúdo. JSON ou JSONB?

Perguntas Frequentes

A aula “JSONB vs JSON: quando usar cada um” é grátis?

Sim — o texto completo de “JSONB vs JSON: quando usar cada um” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “JSONB vs JSON: quando usar cada um”?

Escolha entre JSON (texto, preserva espaços em branco) e JSONB (binário, indexável, com chaves duplicadas eliminadas) para o armazenamento adequado. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “JSONB vs JSON: quando usar cada um”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. JSONB vs JSON: quando usar cada um
  2. Operadores de caminho: -> ->> @>
  3. Indexação de JSONB com GIN
  4. Modelagem: quando JSONB supera a normalização
← Voltar para SQL Academy