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

Dominando o tipo JSONB do PostgreSQL em um único artigo

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

Yijun
Yijun
Developer

No desenvolvimento moderno de aplicações, lidar e armazenar 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 forma eficiente. Neste artigo, nós iremos mergulhar no conceito e no uso do tipo JSONB e demonstrar seus poderosos recursos através de exemplos de código específicos.

O que é JSONB?

JSONB é um tipo de dados do PostgreSQL que armazena dados JSON em um formato binário. Ao contrário do tipo regular JSON, o JSONB é mais eficiente em consultas e manipulações. Ele suporta um rico conjunto de operadores e funções que simplificam o manuseio de dados JSON. Além disso, o JSONB suporta vários tipos de índice, incluindo B-tree, Hash, GIN e índices GiST, aumentando 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. Suponha que temos uma tabela produtos para armazenar informações de produtos, com detalhes do produto armazenados usando o tipo JSONB.

Inserindo dados JSONB

Podemos inserir dados JSON em um 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 dentro de uma estrutura JSON. O exemplo seguinte mostra como extrair a informação da 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 informações 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 em um caminho especificado. O exemplo seguinte mostra como atualizar a informação de armazenamento de um produto.

Deletando campos de nível superior em dados JSONB

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

Deletando campos aninhados em dados JSONB

Podemos usar o operador #- para remover elementos especificados por um caminho dos dados JSONB. Este operador deleta a chave no caminho especificado. O exemplo seguinte mostra como deletar a informação da CPU das especificações do produto.

Consultas avançadas em JSONB

Usando arrays JSONB

Dados JSONB podem incluir arrays e podemos usar operadores relacionados a arrays para lidar com esses dados. O exemplo seguinte mostra como armazenar e consultar produtos com várias tags.

No exemplo acima, você 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 em um. O exemplo seguinte mostra como mesclar novas especificações em 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 de 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. Escolher o tipo certo de índice é crucial para diferentes necessidades de consulta.

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

A seleção e criação adequada de índices pode aumentar significativamente o desempenho das consultas de dados JSONB.

Criando índice GIN

Os í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 de par chave-valor simples, 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 modelo no campo detalhes.

Conclusão

O tipo JSONB do PostgreSQL fornece uma solução poderosa e flexível para lidar com dados JSON. Com a introdução e os exemplos deste artigo, você deve agora ter um entendimento abrangente de como usar o tipo JSONB. Ao dominar essas técnicas, você pode lidar e consultar eficientemente dados não estruturados, aumentando o desempenho e a flexibilidade de suas aplicações.