PostgreSQL jsonb_each()
As funções JSON do PostgreSQL, como `jsonb_each()`, permitem que você manipule e recupere eficientemente os dados armazenados no formato JSONB. A função `jsonb_each()` retorna especificamente um conjunto de pares de valores-chave de um objeto JSONB. O uso de `jsonb_each()` pode simplificar o processamento de dados JSONB, oferecendo vantagens como iteração mais fácil sobre objetos JSONB e compatibilidade com os robustos recursos de indexação do PostgreSQL.
Uso
A função `jsonb_each()` é utilizada para decompor um objeto JSONB em pares de valores-chave individuais, facilitando o processamento e a consulta de dados JSONB. É especialmente útil quando você precisa iterar sobre dados JSONB armazenados em uma tabela do PostgreSQL. A função retorna um conjunto de registros, com `key` como texto e `value` como JSONB.
SELECT jsonb_each(jsonb_column)
FROM table_name;
Nessa sintaxe, `jsonb_each(jsonb_column)` extrai cada par de valores-chave da coluna JSONB especificada.
Exemplos
1. Extração básica
SELECT jsonb_each('{"name": "John", "age": 30}');
Este exemplo divide um objeto JSONB simples em pares de valores-chave individuais, retornando um conjunto com "name" como "John" e "age" como 30. A função é aplicada diretamente a um literal JSONB, útil para fins de demonstração.
2. Extraindo de uma tabela
SELECT jsonb_each(data)
FROM users_data;
Aqui, a função extrai pares de valores-chave da coluna `data` da tabela `users_data`, que armazena objetos JSONB para cada linha. Espera-se que a coluna `data` contenha objetos JSONB bem formados.
3. Usando jsonb_each() com a cláusula WHERE
SELECT key, value
FROM jsonb_each('{"name": "John", "age": 30, "city": "New York"}') AS kv
WHERE kv.key = 'city';
Este exemplo usa `jsonb_each()` em conjunto com uma cláusula `WHERE` para filtrar os resultados, retornando apenas o par chave-valor em que a chave é "city". A parte `AS kv` atribui um alias ao conjunto de resultados para facilitar a referência.
Dicas e práticas recomendadas
- Use com tipos de dados JSONB. Certifique-se de que seus dados JSON sejam armazenados no formato `jsonb` para aproveitar os benefícios de indexação e desempenho.
- Combine com uniões `LATERAL`. Ao trabalhar com tabelas, considere o uso de uniões `LATERAL` para processar dados JSONB com eficiência.
- Filtro nas teclas. Use a cláusula `WHERE` para filtrar chaves específicas quando você precisar apenas de determinados pontos de dados.
- Indexar colunas JSONB. Para otimizar o desempenho, considere a indexação de chaves JSONB consultadas com frequência. Use índices `GIN` para dados JSONB para acelerar as pesquisas de pares de valores-chave.
- Considerações sobre o desempenho. Esteja ciente das possíveis implicações de desempenho ao lidar com objetos JSONB grandes, pois `jsonb_each()` pode afetar o desempenho da consulta.