{"id":3199,"date":"2021-08-09T11:46:16","date_gmt":"2021-08-09T14:46:16","guid":{"rendered":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/?p=3199"},"modified":"2025-09-02T14:22:08","modified_gmt":"2025-09-02T17:22:08","slug":"postgressql-json-types","status":"publish","type":"post","link":"http:\/\/www.55bet-pro.com\/pet\/sistemas-de-informacao\/2021\/08\/09\/postgressql-json-types","title":{"rendered":"PostgresSQL JSON types"},"content":{"rendered":"\n
Fala pessoal, no PET Reda\u00e7\u00e3o desta semana iremos abordar e entender melhor sobre uma das formas de armazenamento\u00a0 de dados do RDBMS (<\/span>Relational Database Management System<\/span><\/i>) <\/span>PostgreSQL<\/span><\/i>, o <\/span>JSON types<\/span><\/i>.<\/span><\/p>\n JSON<\/span><\/i>,\u00a0 sigla para <\/span>JavaScript Object Notation<\/span><\/i>, \u00e9 um formato compacto e simples de troca de dados entre sistemas amplamente utilizado em diversas linguagens e tecnologias. Destaca-se pela facilidade de leitura e interpreta\u00e7\u00e3o para humanos e pelo desempenho na an\u00e1lise e gera\u00e7\u00e3o para as m\u00e1quinas. Exemplo de um <\/span>JSON<\/span><\/i>:<\/span><\/p>\n O conjunto desses dados que est\u00e3o dentro dos par\u00eanteses \u00e9 chamado de objeto e, como mostra a imagem, o <\/span>JSON<\/span><\/i> \u00e9 organizado na forma de atributo-valor, por exemplo, o campo <\/span>\u201cnome\u201d <\/span><\/i>\u00e9 um atributo e o <\/span>\u201cJo\u00e3o da Silva\u201d <\/span><\/i>\u00e9 o valor. Na imagem, percebe-se a utiliza\u00e7\u00e3o de valores em <\/span>strings<\/span><\/i> (texto), <\/span>numbers<\/span><\/i> (n\u00fameros) e <\/span>arrays<\/span><\/i> (vetores), mas o <\/span>JSON <\/span><\/i>aceita os outros valores, como booleanos (true ou false) e outros objetos <\/span>JSON<\/span><\/i>, por exemplo.<\/span><\/p>\n Atualmente, todo mundo que vai iniciar um projeto, que necessita de um banco de dados, acaba entrando no questionamento do SQL e NoSQL. Como j\u00e1 falado anteriormente, o <\/span>PostgreSQL<\/span><\/i> \u00e9 um RDBMS, ou seja, ele pertence ao grupo dos bancos de dados relacionais (SQL), por\u00e9m a partir dos <\/span>JSON types<\/span><\/i> \u00e9 poss\u00edvel armazenar dados em um banco de dados relacional (SQL) de forma semelhante a um n\u00e3o relacional (NoSQL). Antes de entrar no assunto principal dessa reda\u00e7\u00e3o, faz-se necess\u00e1rio entender de modo geral um pouco sobre SQL e o NoSQL.<\/span><\/p>\n SQL: <\/b>SQL \u00e9 a sigla para <\/span>\u201cStructured Query Language\u201d<\/span><\/i>, traduzindo ficaria “Linguagem de Consulta Estruturada\u201d, o qual tem o objetivo de tornar vi\u00e1vel o modelo relacional de banco de dados, que \u00e9 uma maneira direta de representar dados em tabelas,\u00a0 e fornecendo acesso a pontos de dados relacionados entre si.<\/span><\/p>\n NoSQL:<\/b>\u00a0 <\/b>NoSQL significaria \u201c<\/span>Not Only SQL\u201d, traduzindo seria \u201cN\u00e3o somente SQL\u201d, criado com o objetivo de ter uma performance melhor que o modelo SQL e de forma n\u00e3o relacional, <\/span><\/i>e uma escalabilidade mais horizontal para suprir necessidades onde os bancos relacionais n\u00e3o s\u00e3o eficazes.<\/span><\/p>\n Existem 4 tipos de bancos de dados NoSQL:<\/span><\/p>\n \u00a0<\/p>\n Para complementar, o modelo relacional (SQL) tem como base guardar dados dentro de tabelas, diferente do modelo n\u00e3o-relacional (NoSQL), o qual tem como aplicagem o modelo <\/span>schema, <\/span><\/i>que \u00e9 usado uma chave de valor para recuperar valores, colunas ou documentos. Com isso, devemos levar em considera\u00e7\u00e3o a modelagem do sistema para sabermos qual das duas formas usar. Por exemplo, a escalabilidade no NoSQL \u00e9 bem maior que no SQL, ou seja, para sistemas mais complexos utilizamos o NoSQL, pois n\u00e3o compensa fazer o uso do mesmo em um sistema simples, isso geraria perda na performance.<\/span><\/p>\n No <\/span>PostgreSQL<\/span><\/i>, <\/span>JSON types<\/span><\/i> s\u00e3o as formas de armazenar <\/span>JSON<\/span><\/i> em um banco de dados. A vantagem de guardar um <\/span>JSON <\/span><\/i>com essa tipagem, ao inv\u00e9s de um simples campo de texto, \u00e9 que ele ser\u00e1 validado de acordo com regras do <\/span>JSON<\/span><\/i>. Al\u00e9m disso, existem fun\u00e7\u00f5es e operadores espec\u00edficos para o tratamento de <\/span>JSON types<\/span><\/i>.<\/span><\/p>\n O<\/span> Postgres<\/span><\/i> possui dois tipos de dados para <\/span>JSON<\/span><\/i>: <\/span>json<\/span><\/i> e <\/span>jsonb<\/span><\/i>. Ambos s\u00e3o praticamente id\u00eanticos, mas a diferen\u00e7a est\u00e1 na forma que cada um \u00e9 armazenado. Enquanto o <\/span>json <\/span><\/i>\u00e9 guardado como uma c\u00f3pia exata do texto <\/span>JSON<\/span><\/i>, o <\/span>jsonb<\/span><\/i> \u00e9 armazenado numa forma bin\u00e1ria decomposta.\u00a0<\/span><\/p>\n Os principais benef\u00edcios do <\/span>jsonb<\/span><\/i> s\u00e3o:<\/span><\/p>\n As principais desvantagens do <\/span>jsonb <\/span><\/i>s\u00e3o:<\/span><\/p>\n \u00a0<\/p>\n Para fazer consultas SQL, \u00e9 necess\u00e1rio baixar o <\/span>PostgreSQL<\/span><\/i><\/a> e <\/span>configur\u00e1-lo<\/span><\/a>. Ap\u00f3s isso, pode-se iniciar a cria\u00e7\u00e3o do banco de dados e a cria\u00e7\u00e3o das tabelas com os campos <\/span>json<\/span><\/i> e <\/span>jsonb<\/span><\/i>. Abrindo o <\/span>pgAdmin<\/span><\/i> e colocando a senha definida na configura\u00e7\u00e3o, \u00e9 poss\u00edvel criar um banco de dados dessa forma:<\/span><\/p>\n Seguidamente, deve-se somente nomear a <\/span>database<\/span><\/i> e clicar em \u201c<\/span>save\u201d<\/span><\/i>. Posteriormente, para implementar as tabelas do nosso banco de dados deve-se abrir o <\/span>\u201cQuery Tool\u201d<\/span><\/i>, de acordo com imagem abaixo:<\/span><\/p>\n Logo, \u00e9 necess\u00e1rio executar o seguinte <\/span>query<\/span><\/i> para fazer a cria\u00e7\u00e3o da tabela \u201caluno\u201d, que vai ter um campo <\/span>id<\/span><\/i>, tipo serial e chave prim\u00e1ria (identificador \u00fanico de cada registro da tabela),\u00a0 e um campo <\/span>dados<\/span><\/i>, tipo <\/span>jsonb<\/span><\/i> ou <\/span>json<\/span><\/i>, como na figura a seguir:<\/span><\/p>\nO que \u00e9 <\/span>JSON<\/span><\/i>?<\/span><\/h3>\n
<\/span><\/p>\nIntrodu\u00e7\u00e3o<\/span> \u00a0 <\/span>\u00a0<\/span><\/i><\/h3>\n
Diferen\u00e7as de SQL e NoSQL<\/span><\/h3>\n
\n
<\/span><\/li>\n
<\/span><\/li>\n
<\/span><\/li>\n
Introdu\u00e7\u00e3o aos <\/span>JSON types <\/span><\/i>do <\/span>PostgreSQL<\/span><\/i><\/h3>\n
Compara\u00e7\u00e3o <\/span>json<\/span><\/i> e <\/span>jsonb<\/span><\/i><\/h4>\n\n
\n
Consultas com <\/span>json<\/span><\/i> e <\/span>jsonb<\/span><\/i><\/h3>\n
<\/span><\/p>\n
<\/span><\/p>\n