Pular para o conteúdo

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.

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}.

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”).

  • 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 tamanho e cor, mas um laptop tem ram e cpu).
  • Listas: Armazenar arrays simples de strings ou números (por exemplo, ["tag1", "tag2", "tag3"]).