PostgreSQL para gerenciar o JSON

PostgreSQL para gerenciar o JSON
Um dos muitos tipos de dados que o suporte do PostGresql é JSON. Como a maior parte da comunicação da Web APIs usa imensamente a carga útil do JSON, esse recurso é bastante importante. Em vez de usar o tipo de dados de texto simples para armazenar objetos JSON, o Postgres possui um tipo de dados diferente que é otimizado para cargas úteis JSON, verifica que os dados armazenados nesses campos confirmam à especificação RFC. Também de uma maneira clássica do Postgres, ele permite ajustar seus campos json para o máximo desempenho.

Ao criar uma tabela, você terá duas opções para sua coluna JSON. Tipo de dados JSON e JSONB simples, ambos têm suas próprias vantagens e desvantagens. Passaremos por cada um deles, criando uma tabela simples com apenas 2 colunas um ID e um valor JSON. Depois disso, consultaremos dados da tabela e teremos uma ideia de como gerenciar dados formatados JSON no Postgres.

JSON Data Type

Criando uma tabela com tipo de dados JSON

Vamos criar uma tabela simples de duas colunas denominada usuários:

Crie usuários de tabela (
Id Serial Not Null Primária Chave,
info json não nulo
);

Aqui, o ID da coluna atua como a chave primária e aumentará de maneira incremental graças ao pseudótipo serial, para que não tenhamos que nos preocupar em inserir manualmente valores para identificação à medida que avançamos.

A segunda coluna é do tipo JSON e é forçada a não ser nula. Vamos inserir algumas linhas de dados nesta tabela, consistindo em valores JSON.

Insira valores de usuários (info) (
'
"Nome": "Jane Doe",
"Email": "[email protected] ",
"PersonalDetails": "Age": 33, "Gênero": "F"
');
Insira valores de usuários (info) (
'
"Nome": "Jane Doe",
"Email": "[email protected] ",
"PersonalDetails": "Age": 33, "Gênero": "F"
');

Você pode usar o seu JSON Preferido Beautifier/Minifier para converter as cargas úteis JSON acima em uma única linha. Para que você possa colar em um prompt de vá para o seu PSQL.

Selecione * dos usuários;
id | informações
----+------------------------------------------------------
1 | "Nome": "John Doe", "Email": "[email protected] "…
2 | "Nome": "Jane Doe", "Email": "[email protected] "…
(2 linhas)

O comando SELECT no final nos mostrou que as linhas foram inseridas com sucesso na tabela de usuários.

Consultando o tipo de dados JSON

O Postgres permite que você se aproxime da carga útil do JSON e recupere um valor específico, se você a referir usando o valor correspondente. Podemos usar o operador -> após o nome da coluna JSON, seguido pela chave dentro do objeto JSON. Fazendo isso
Por exemplo, na tabela que criamos acima:

Selecione Informações -> 'Email' dos usuários;
----+----------------------------------------
id | ?coluna?
----+----------------------------------------
1 | "[email protected] "
2 | "[email protected] "

Você deve ter notado as citações duplas na coluna contendo e -mails. Isso ocorre porque o operador -> retorna um objeto JSON, conforme presente no valor da chave "email". Claro, você pode retornar apenas texto, mas terá que usar o operador ->> em vez disso.

Selecione Informações ->> 'Email' dos usuários;
id | ?coluna?
----+----------------------------------------
1 | [email protected]
2 | [email protected]

A diferença entre retornar um objeto JSON e uma string fica claro quando começamos a trabalhar com objetos JSON aninhados dentro de outros objetos JSON. Por exemplo, eu escolhi a chave "PersonalDetails" para manter intencionalmente outro objeto JSON. Também podemos cavar esse objeto, se quisermos:

Selecione Informações -> 'PersonalDetails' -> 'Gênero' dos usuários;
?coluna?
----------
"M"
"F"
(2 linhas)

Isso pode permitir que você vá tão profundo no objeto JSON quanto você gostaria. Vamos soltar esta tabela e criar uma nova (com o mesmo nome), mas com o tipo JSONB.

Tipo de dados JSONB

Exceto pelo fato de que durante a criação da tabela mencionamos JSONB Data Type em vez de JSON, tudo mais visual o mesmo.

Crie usuários de tabela (
Id Serial Not Null Primária Chave,
info jsonb não nulo
);

Até a inserção de dados e recuperação usando o operador -> se comporta da mesma maneira. O que mudou é tudo sob o capô e perceptível no desempenho da mesa. Ao converter o texto JSON em um JSONB, o Postgres realmente transforma os vários tipos de valor JSON em tipo de pós -nativo, para que nem todos os objetos JSON válidos possam ser salvos como Valor JsonB válido.

Além disso, o JSONB não preserva os espaços em branco, a ordem das chaves JSON, conforme fornecido pela declaração de inserção. JSONB realmente converte a carga útil em binário nativo de Postgres, daí o termo JSONB.

Obviamente, a inserção do JSONB Datum tem uma sobrecarga de desempenho por causa de todo esse trabalho adicional que o Postgres precisa fazer. No entanto, a vantagem que você obtém é em termos de processamento mais rápido dos dados já armazenados, pois seu aplicativo não teria a necessidade de analisar uma carga útil JSON toda vez que ele recupera um do banco de dados.

JSON VS JSONB

A decisão entre JSON e JSONB SOLE depende do seu caso de uso. Em caso de dúvida, use o JSONB, já que a maioria dos aplicativos tende a ter operações de leitura mais frequentes que escrevem operações. Por outro lado, se você tem certeza de que seu aplicativo deverá fazer mais operações de gravação síncrona do que lida, considere JSON como uma alternativa.

Conclusão

Pessoas que trabalham com cargas úteis JSON e projetando interfaces para armazenamento pós -Gres se beneficiarão imensamente desta seção específica de sua documentação oficial. Os desenvolvedores tiveram a gentileza de nos fornecer indexação JSONB e outros recursos interessantes que podem ser aproveitados para melhorar o desempenho e a simplicidade do seu aplicativo. Eu imploro a você para investigar isso também.
Felizmente, você achou esta breve introdução do assunto útil e inspirador.