Campo JSONB
O campo JSONB (rotulado como jsonb na interface) é usado para armazenar conjuntos de dados não estruturados ou semiestruturados, como Objetos {...} ou Arrays [...].
Ao contrário de um campo de Texto padrão, este campo usa o formato JSONB (JSON Binário). Isso significa que o banco de dados verifica se a entrada é JSON válido antes de salvá-la e armazena os dados em um formato binário decomposto que permite indexação e consulta eficientes de chaves específicas dentro da estrutura.
Propriedades de Configuração
Seção intitulada “Propriedades de Configuração”Ao configurar um campo JSON na barra lateral direita, as seguintes configurações estão disponíveis:
- Name: O identificador de sistema exclusivo para o campo (por exemplo,
metadata,settings,api_response). - Default Value: Um objeto ou array JSON válido para atribuir se nenhum dado for fornecido (por exemplo,
{"theme": "dark"}ou[]). - Description: Uma caixa de texto opcional para descrever o esquema ou propósito dos dados JSON.
- Mandatory: Se ativado, o registro não pode ser salvo a menos que dados JSON válidos sejam fornecidos.
- Unique: Se ativado, garante que não existam dois registros com a mesma estrutura e conteúdo JSON exatos.
- Nota: Isso impõe uma igualdade binária exata, o que significa que
{"a": 1, "b": 2}provavelmente seria considerado igual a{"b": 2, "a": 1}dependendo da normalização do banco de dados, mas distinto de{"a": 1}.
- Nota: Isso impõe uma igualdade binária exata, o que significa que
Dica: Por que JSONB? Usamos o tipo de dados JSONB em vez de JSON padrão. Embora ligeiramente mais lento para escrever, o JSONB é significativamente mais rápido para consultar. Ele suporta indexação (GIN), o que permite realizar pesquisas e filtragens de alto desempenho diretamente em chaves e valores dentro do objeto JSON (por exemplo, encontrar todos os usuários onde
attributes->'color'é “azul”).
Casos de Uso Comuns
Seção intitulada “Casos de Uso Comuns”- Configuração/Preferências: Armazenar preferências do usuário que podem mudar frequentemente sem exigir novas colunas de banco de dados (por exemplo,
{"notifications": true, "theme": "dark"}). - Dados de API Externa: Armazenar respostas brutas de integrações de terceiros (por exemplo, webhooks do Stripe ou cargas úteis de log).
- Atributos Dinâmicos: Detalhes do produto que variam muito entre categorias (por exemplo, uma camiseta tem
tamanhoecor, mas um laptop temramecpu). - Listas: Armazenar arrays simples de strings ou números (por exemplo,
["tag1", "tag2", "tag3"]).