Pular para o conteúdo principal
Documentos
Sintaxe básicaFunções JSONAcionadoresGerenciamento de tabelas e esquemasFunções de cadeia de caracteresFunções matemáticasFunções de dataBancos de dadosÍndices

PostgreSQL jsonb_array_elements()

PostgreSQL `jsonb_array_elements()` é uma função JSON usada para expandir uma matriz JSON em um conjunto de elementos JSON. Ele é particularmente útil para consultar e manipular dados JSON armazenados em bancos de dados PostgreSQL.

Uso

A função `jsonb_array_elements()` é utilizada quando você precisa processar cada elemento de uma matriz JSON individualmente. É comumente usado em conjunto com junções `LATERAL` para iterar sobre os elementos do array.

SELECT jsonb_array_elements(jsonb_column)
FROM table_name;

Nessa sintaxe, `jsonb_array_elements(jsonb_column)` desconstrói a matriz JSON em `jsonb_column` e retorna cada elemento como uma linha separada. Observe que, se a matriz estiver vazia, nenhuma linha será retornada e, se o JSON de entrada for "nulo", o resultado também será "nulo".

Exemplos

1. Uso básico

SELECT jsonb_array_elements('[1, 2, 3, 4]');

Esse exemplo gera cada número na matriz JSON `[1, 2, 3, 4]` como uma linha separada, resultando em quatro linhas.

2. Extração de elementos de uma coluna de tabela

SELECT jsonb_array_elements(data)
FROM orders;

Supondo que `data` seja uma coluna na tabela `orders` que contém matrizes JSON, essa consulta extrai e gera cada elemento das matrizes armazenadas na coluna `data`. Tenha cuidado com objetos JSON que não sejam de matriz, pois eles podem levar a erros de tempo de execução.

3. Usando com LATERAL Join

SELECT o.id, elem
FROM orders AS o, LATERAL jsonb_array_elements(o.items) AS elem;

Neste exemplo, cada elemento da matriz JSON `items` na tabela `orders` é extraído e unido à tabela `orders` para produzir uma linha para cada elemento, juntamente com o `id` do pedido. A palavra-chave `LATERAL` permite que cada linha da tabela de pedidos seja processada individualmente com sua matriz JSON correspondente.

Dicas e práticas recomendadas

  • Garanta a validade do JSON. Sempre valide os dados JSON antes de usar `jsonb_array_elements()` para evitar erros de tempo de execução.
  • Use LATERAL para uniões. O `LATERAL` permite que cada linha seja processada com sua matriz JSON específica, possibilitando uniões complexas.
  • Filtre os resultados antecipadamente. Aplique filtros antes de expandir as matrizes para melhorar o desempenho ao trabalhar com grandes conjuntos de dados.
  • Indexar colunas JSONB. Considere a possibilidade de indexar colunas JSONB para acelerar as consultas que envolvem funções JSON, especialmente quando você consulta grandes conjuntos de dados com frequência.
  • Considerações sobre o desempenho. Esteja atento aos impactos no desempenho ao usar `jsonb_array_elements()` em arrays JSON grandes ou profundamente aninhados.
  • Comparação com `json_array_elements()`. O `jsonb_array_elements()` é usado com dados JSONB, que são armazenados em um formato binário decomposto, oferecendo melhor desempenho do que o `json_array_elements()` em muitos casos.