Português (Portugal)
  • postgresql
  • jsonb
  • json
  • base de dados

Dominando o tipo JSONB do PostgreSQL num único artigo

Aprenda a usar o tipo JSONB do PostgreSQL para armazenar, consultar e manipular eficientemente dados JSON.

Yijun
Yijun
Developer

No desenvolvimento moderno de aplicações, o manuseio e armazenamento de dados não estruturados está se tornando cada vez mais comum. O tipo JSONB do PostgreSQL fornece uma ferramenta poderosa para os desenvolvedores armazenarem e consultarem dados JSON de maneira eficiente. Neste artigo, vamos aprofundar o conceito e uso do tipo JSONB e demonstrar suas poderosas funcionalidades através de exemplos de código específicos.

O que é JSONB?

JSONB é um tipo de dados do PostgreSQL que armazena dados JSON num formato binário. Ao contrário do tipo JSON regular, o JSONB é mais eficiente na consulta e manipulação. Ele suporta um rico conjunto de operadores e funções que simplificam o manuseio de dados JSON. Adicionalmente, o JSONB suporta múltiplos tipos de índices, incluindo B-tree, Hash, GIN, e GiST indexes, melhorando ainda mais o desempenho da consulta.

Criando tipo JSONB

Criando uma tabela com o tipo JSONB

Primeiro, vamos criar uma tabela com uma coluna JSONB. Suponhamos que temos uma tabela products para armazenar informações do produto, com detalhes do produto armazenados usando o tipo JSONB.

Inserindo dados JSONB

Podemos inserir dados JSON num campo JSONB usando uma simples declaração INSERT.

Consultando dados JSONB

Extraindo valores de campos JSONB

Podemos usar o operador ->> para extrair valores de texto de um campo JSONB. O exemplo seguinte mostra como extrair a informação da marca de um produto.

Extraindo valores aninhados com JSONB

Podemos usar uma combinação de operadores -> e ->> para extrair valores aninhados numa estrutura JSON. O exemplo seguinte mostra como extrair a informação CPU de um produto.

Extraindo valores com caminhos JSONB

Usando o operador #>>, podemos extrair valores de caminhos específicos dentro dos dados JSON. O exemplo seguinte mostra como extrair a informação de armazenamento.

Usando o operador @> para consultas de contenção

O operador @> verifica se um objeto JSONB contém outro objeto JSONB. O exemplo seguinte mostra como consultar produtos de uma marca específica.

Modificando dados JSONB

Atualizando dados JSONB

Podemos usar a função jsonb_set para atualizar dados JSONB. Esta função atualiza o valor num caminho especificado. O exemplo seguinte mostra como atualizar a informação de armazenamento de um produto.

Excluindo campos de nível superior em dados JSONB

Podemos usar o operador - para remover campos de nível superior dos dados JSONB. Este operador exclui a chave especificada de um objeto JSONB. O exemplo seguinte mostra como remover um campo de nível superior dos detalhes do produto.

Excluindo campos aninhados em dados JSONB

Podemos usar o operador #- para remover elementos de caminho específicos dos dados JSONB. Este operador exclui a chave no caminho especificado. O exemplo seguinte mostra como excluir a informação CPU das especificações do produto.

Consultas avançadas JSONB

Usando arrays JSONB

Os dados JSONB podem incluir arrays, e podemos usar operadores relacionados a arrays para manipular estes dados. O exemplo seguinte mostra como armazenar e consultar produtos com múltiplas tags.

No exemplo acima, também pode usar o operador ? para verificar se um array JSONB contém um elemento específico:

Mesclando dados JSONB

Podemos usar o operador || para mesclar dois objetos JSONB. Este operador combina dois objetos JSONB num só. O exemplo seguinte mostra como mesclar novas especificações nos detalhes de produto existentes.

Agregando dados JSONB

Podemos usar funções de agregação para processar dados JSONB, como contar o número de produtos para cada marca.

Indexação JSONB e Otimização de Desempenho

Para melhorar o desempenho da consulta com dados JSONB, podemos criar índices em chaves específicas dentro do campo JSONB. A escolha do tipo certo de índice é crucial para diferentes necessidades de consulta.

  • Índice GIN: Adequado para consultas complexas envolvendo dados multivalorados, arrays e busca de texto completo.
  • Índice B-tree: Adequado para consultas simples de pares chave-valor, consultas de intervalo e operações de ordenação.

Selecionar e criar adequadamente os índices pode aumentar significativamente o desempenho das consultas de dados JSONB.

Criando índice GIN

Índices GIN são ideais para acelerar consultas envolvendo dados multivalorados e arrays. Por exemplo, podemos criar um índice GIN para o array tags mencionado anteriormente, para acelerar consultas em elementos de array.

Criando índice B-tree

Para consultas simples de pares chave-valor, um índice B-tree também pode melhorar significativamente o desempenho. Índices B-tree são adequados para consultas de intervalo e operações de ordenação. O exemplo seguinte mostra como criar um índice B-tree para a chave model no campo details.

Conclusão

O tipo JSONB do PostgreSQL fornece uma solução poderosa e flexível para manusear dados JSON. Com a introdução e exemplos neste artigo, você deve agora ter uma compreensão abrangente de como usar o tipo JSONB. Ao dominar estas técnicas, poderá manusear e consultar de forma eficiente dados não estruturados, melhorando o desempenho e a flexibilidade das suas aplicações.