Pular para o conteúdo principal

PostgreSQL #>> Operador

As funções JSON do PostgreSQL foram projetadas para consultar e manipular dados JSON em seu banco de dados. O operador #>> é uma função JSON específica usada para extrair texto de um objeto JSON usando um caminho especificado.

Uso

O operador #>> é usado quando você precisa recuperar um valor de texto de um objeto JSON navegando pelo seu caminho. É particularmente útil para acessar campos JSON profundamente aninhados.

SELECT json_column #>> '{path, to, key}'
FROM table_name;

Nessa sintaxe, json_column é a coluna que contém dados JSON, e o caminho {path, to, key} especifica a hierarquia para acessar o valor desejado.

Exemplos

1. Extração básica

Suponha que a coluna data contenha objetos JSON como {"name": "Alice"}.

SELECT data #>> '{name}'
FROM users;

Neste exemplo, o operador extrai o valor de texto associado à chave name do objeto JSON na coluna data da tabela users.

2. Objeto JSON aninhado

Considere uma estrutura JSON como {"address": {"city": "New York"}} na coluna info.

SELECT info #>> '{address, city}'
FROM customers;

Aqui, o operador #>> acessa o campo city dentro do objeto address aninhado na coluna info da tabela customers.

3. Acesso a campos JSON profundamente aninhados

Se a coluna details contiver JSON, como {"profile": {"contact": {"email": "[email protected]"}}}:

SELECT details #>> '{profile, contact, email}'
FROM employees;

Este exemplo recupera o campo email localizado em um objeto contact aninhado dentro do objeto profile da coluna details.

Dicas e práticas recomendadas

  • Garanta a validade do JSON. Antes de usar as funções JSON, verifique se os dados JSON estão bem formados para evitar erros.
  • Use a indexação para obter desempenho. Considere o uso de JSONB com indexação GIN para consultas mais rápidas em dados JSON. Por exemplo, crie um índice usando:
    CREATE INDEX idx_gin ON table_name USING gin(jsonb_column);
            
  • Especifique caminhos completos. Especifique claramente o caminho completo para o campo de destino para evitar resultados inesperados. Observe que, se o caminho não existir, o resultado será NULL.
  • Otimize com a conversão de tipos. Use ::text para fazer a conversão explícita quando necessário, especialmente ao combinar com outras funções SQL. Por exemplo:
    SELECT (data #>> '{name}')::text || ' is a user'
            FROM users;