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

Indexação PostgreSQL GIN

As funções JSON do PostgreSQL permitem que você armazene, consulte e manipule dados JSON em seu banco de dados. Eles são essenciais para lidar com tipos de dados JSON e realizar operações como extração, agregação e transformação.

Uso

As funções JSON são usadas quando você lida com dados JSON armazenados no PostgreSQL, permitindo a consulta e a manipulação eficientes desse tipo de dados semiestruturados. Eles facilitam operações como a recuperação de objetos JSON, o acesso a valores específicos e a realização de modificações.

Syntax


json -> key
jsonb ->> key
jsonb_set(target jsonb, path text[], new_value jsonb)

Nesses exemplos, `->` é usado para extrair objetos JSON, `->>` recupera valores JSON como texto e `jsonb_set` atualiza dados JSON em um caminho especificado.

Diferença entre `json` e `jsonb`:

  • json: Armazena dados JSON como texto, preservando os espaços em branco e a ordem das chaves.
  • jsonb: Armazena dados JSON em um formato binário, oferecendo melhor desempenho e recursos de indexação. É por isso que o `jsonb` é geralmente preferido para a maioria dos casos de uso.

Exemplos

1. Extração de objeto JSON


SELECT data -> 'name' AS name
FROM json_table;

Essa consulta extrai o objeto JSON associado à chave `name` de uma coluna `data` na `json_table`.

2. Acesso ao valor JSON como texto


SELECT data ->> 'age' AS age
FROM json_table;

Aqui, o valor JSON de `age` é recuperado como texto, ideal para casos em que você precisa dos dados em formato de texto para processamento posterior.

3. Atualização de dados JSON


UPDATE json_table
SET data = jsonb_set(data, '{address, city}', '"New York"')
WHERE id = 1;

Isso atualiza o campo `city` no objeto JSON `address` para "New York" em uma linha específica em que `id` é 1.

4. Manipulação de matrizes JSON


SELECT jsonb_array_elements(data -> 'tags') AS tag
FROM json_table;

Essa consulta demonstra como lidar com matrizes JSON, extraindo cada elemento da matriz `tags` em um objeto JSON.

5. Operações JSON


SELECT jsonb_each(data)
FROM json_table;

Este exemplo usa `jsonb_each` para expandir o objeto JSON em um conjunto de pares de valores-chave, útil para a iteração de dados.

Dicas e práticas recomendadas

  • Use `jsonb` em vez de `json`. O `jsonb` é geralmente preferido para melhorar o desempenho e os recursos de indexação.
  • Indexar dados JSON. Utilize a indexação GIN para fazer consultas eficientes de dados JSONB para melhorar o desempenho.
  • 
    CREATE INDEX jsonb_idx ON json_table USING GIN (data);
    
  • Limitar a profundidade do JSON. Mantenha as estruturas JSON rasas para evitar consultas complexas e melhorar a legibilidade.
  • Aproveite as funções do PostgreSQL. Use funções internas como `jsonb_array_elements` para lidar com matrizes JSON de forma eficaz.
  • Validar a estrutura JSON. Garanta que os dados JSON sigam os esquemas esperados para evitar erros durante a consulta ou a manipulação.
  • Lidar com chaves ausentes de forma graciosa. Use funções como `coalesce` para gerenciar chaves ausentes e fornecer valores padrão.