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 fornecidoJSONB— 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 picksJSONB: 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 pathContençã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; -- TRUEConversã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
- JSONB vs JSON: quando usar cada um
- Operadores de caminho: -> ->> @>
- Indexação de JSONB com GIN
- Modelagem: quando JSONB supera a normalização