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);