CodeGym /Cursos /SQL SELF /Trabalhando com o tipo de dado JSONB

Trabalhando com o tipo de dado JSONB

SQL SELF
Nível 16, Lição 1
Disponível

JSON (JavaScript Object Notation) é um formato de dados super popular pra trocar informação entre sistemas. Ele é leve, fácil de ler e perfeito pra representar dados estruturados, tipo objetos ou arrays.

O PostgreSQL suporta dois tipos de dados pra trabalhar com JSON:

  • JSON: armazena os dados como string. É uma representação puramente textual do JSON, sem otimização interna.
  • JSONB: representação binária do JSON. É mais eficiente pra leitura, filtragem e processamento, porque o PostgreSQL já faz o parsing do JSON e otimiza o armazenamento.

Por que a galera geralmente escolhe JSONB? Porque:

  • É mais rápido nas consultas por causa do armazenamento binário.
  • Dá pra criar índice, então é perfeito pra conjuntos de dados grandes.
  • Salva as chaves ordenadas e remove duplicatas, o que facilita o processamento.

Exemplo de estrutura JSON:

{
  "name": "Alice",
  "age": 25,
  "skills": ["SQL", "PostgreSQL", "JSONB"]
}

Por que JSONB é útil?

Armazenar dados semiestruturados. No mundo real, os dados muitas vezes chegam como objetos complexos (tipo metadados, configurações, perfis de usuário). JSONB deixa você guardar tudo isso sem precisar criar centenas de tabelas e relações.

Modelar dados que mudam. Quando a estrutura do objeto muda toda hora (tipo adicionando ou removendo campos), JSONB deixa o armazenamento bem flexível.

Trabalhar com API. Muitos apps web mandam dados em formato JSON. Em vez de converter tudo, dá pra guardar "do jeito que veio" e trabalhar direto com eles.

Criando uma tabela com JSONB

Bora pra prática! Imagina que a gente tá criando um banco pra guardar perfis de usuários.

A coluna profile vai guardar todas as infos extras (tipo idade, interesses, contatos) em formato JSON. Isso é massa quando a estrutura dos dados muda de um usuário pra outro.

id name - VARCHAR(100) profile - JSONB
1 Alice {"age": 25, "skills": ["SQL", "PostgreSQL", "JSONB"], "location": "New York"}
2 Bob {"age": 30, "interests": ["hiking", "photography"], "location": "Denver"}
3 Charlie {"email": "charlie@example.com", "verified": true}
4 Diana {"age": 22, "skills": ["Python"], "bio": "Data enthusiast", "location": "Berlin"}
5 Eve {"age": 28, "skills": [], "preferences": {"theme": "dark", "notifications": false}}

Os dados em JSON podem ser inseridos como strings. O PostgreSQL converte automaticamente pro formato JSONB.

Extraindo dados do JSONB

Agora que já temos dados, bora ver como extrair eles. O PostgreSQL tem vários operadores pra trabalhar com JSONB.

Acessando o valor de um campo

Usa o operador -> pra pegar o valor de um campo:

-- Mostra a idade do usuário
SELECT profile->'age' AS age FROM users;

Convertendo valor pra texto

O operador ->> deixa você extrair o valor como string:

-- Mostra o local de residência do usuário
SELECT profile->>'location' AS location FROM users;

Filtrando dados com JSONB

O poder do JSONB aparece mesmo nas consultas com filtro. Dá pra usar operadores SQL padrão pra trabalhar com JSON.

Exemplo de filtro por chave:

-- Achar usuários que moram em "New York"
SELECT * FROM users
WHERE profile->>'location' = 'New York';

Buscando em array

JSON suporta arrays, e o PostgreSQL sabe procurar valores dentro deles:

-- Achar usuários que sabem SQL
SELECT * FROM users
WHERE 'SQL' = ANY(jsonb_array_elements_text(profile->'skills'));

A função jsonb_array_elements_text transforma os elementos do array em strings pra poder comparar.

Tem um jeito mais curto usando o operador @>:

-- Achar usuários que sabem SQL
SELECT * FROM users
WHERE profile->'skills' @> '["SQL"]';

Depois a gente fala mais sobre funções e jeitos de trabalhar com JSON, quando chegar a hora :P

Resumo rápido: quando usar JSONB

JSONB é top pra:

  • Armazenar dados estruturados complexos.
  • Trabalhar com dados vindos de APIs externas.
  • Quando a estrutura do objeto muda bastante.

Mas não esquece: usar JSONB demais pode complicar a indexação e a administração do banco. Se a estrutura dos dados for estável, é melhor usar o modelo relacional.

2
Tarefa
SQL SELF, nível 16, lição 1
Bloqueado
Extraindo dados de JSONB
Extraindo dados de JSONB
2
Tarefa
SQL SELF, nível 16, lição 1
Bloqueado
Filtragem de dados usando JSONB
Filtragem de dados usando JSONB
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION