PostgreSQL é um dos bancos de dados mais estáveis e completos disponíveis. Além de uma história de 30 anos de desenvolvimento que precede a padronização de SQL como linguagem padrão de consulta para bancos de dados relacionais. PostgreSQL é o sucessor do Ingres (o nome vem de "Post Ingres") e sua história é plena de inovação, como a orientação a objetos aproximando o mundo da orientação a objetos e dos dados estruturados dos bancos relacionais, e além de tudo, é software livre.
PostgreSQL (ou Postgres, mas nunca POSTGRE, por favor!) também suporta dados não estruturados através de seu tipo HSTORE desde 2006 e nas versões mais recentes ganhou o tipo JSONB. Estas características fazem com que o Postgres ganhe suporte nativo a dados no estilo "chave->valor" como Cassandra, CouchDB, etc e também a documentos JSON, exatamente como o MongoDB.
Postgres também possui uma implementação muito completa de suporte a dados geográficos através de sua venerada extensão Postgis.
Todas estas características são apenas uma descrição rasa do trabalho inovador realizado na evolução do PostgreSQL. Este trabalho coroou seu criador, Michael Stonebraker, com o prêmio Turing de 2014, prêmio reservado aos contribuidores dos grandes avanços da computação mundial, tão prestigioso quanto o prêmio Nobel.
Mas que tal colocar a mão na massa e experimentar um pouco das características NoSQL do Postgres? Vamos criar duas tabelas, uma tradicional e uma tabela com apenas uma coluna com dados JSONB. Estes exemplos foram executados em um banco PostgreSQL v9.4.
Digamos que criamos um sistema de banco de dados para gerenciar um Petshop web. Nossos produtos estão armazenados de forma estruturada em uma tabela tradicional, "produtos" e dados obtidos de nossos usuários estão armazenados na forma de documentos json. Criemos a tabela de produtos e vamos inserir uma ração para gatos e uma para cachorros:
macan=# create table produtos ( produto_id int, produto_nome varchar(80), produto_para varchar(80), preco numeric(6,2), estoque int );
Agora vamos criar uma tabela com documentos JSON, completamente schemaless. Façamos de conta que estes dados foram entrados por usuários via um frontend web que evoluiu de forma a incluir novos campos a cada release. Para isso vamos criar uma tabela com apenas uma coluna, do tipo JSONB e inserir alguns dados com diferentes campos.
Note que poderíamos criar outras colunas, poderíamos ter uma tabela relacional tradicional com user_id, user_name e etc e um campo user_data com um documento json por usuário, mas vamos deixá-la assim para efeito de demonstração. Vamos inserir 3 documentos com conteúdo diferente. Digamos que nossos usuários tenham cadastrado dados de seus bichinhos em nosso site, primeiro em um momento quando isso não era possível e depois quando este recurso foi implementado.
Note que um dos bichinhos não teve seu tipo ou idade especificada. Vamos agora fazer uma consulta por todos os documentos que dizem respeito a bichos com menos de 5 anos de idade.
Note que, como era de se esperar, o documento que não possuia um campo "idade" não entrou na consulta, não é como se sua ausência significasse um valor default (zero, por exemplo). Este campo não existe para este documento, logo ele não será incluído em nenhuma consulta que use o campo "idade".
Digamos agora que iremos fazer um spamEmail Marketing para nossos clientes cadastrados oferecendo ração para seus bichos. Como você faria isso se estivesse usando dois gerenciadores de bancos de dados diferentes em seu sistema? MySQL para a parte transacional/relacional e MongoDB para a parte NoSQL? Seja lá como fosse implementado, você deveria fazer múltiplas consultas, armazenar resultados intermediários em memória e depois consolidá-los, possivelmente iterando pela lista de resultados de uma das consultas.
Voilà! Já podemos enviar nosso spamEmail Marketing oferecendo produtos adequados para cada bichinho de nossos clientes, com um template customizado para gatos e outro para cachorros, por que não? Um dos bichos ficou de fora, mas ele foi cadastrado numa versão antiga do nosso sistema, que não possuia ainda uma entrada de formulário para tipo e idade do bichinho. The schemaless way!
Temos os dois mundos, relacional e não relacional juntos e perfeitamente integrados, sem a necessidade de malabarismos e podendo fazer uso do melhor de cada um. Transações? Sim! Esquema flexível? Também!
Óbvio que nem mencionei a criação de índices e outros tópicos importantes, mas deixo a investigação para o leitor, cuja curiosidade espero ter atiçado.
Muito intessante isso aí...eu até já tinha ouvido falar desse suporte a JSON do Postgres, mas não me interessado em saber como ele tinha sido implementado. Vou dar uma olhada com mais calma nisso aí agora!!!
Dois detalhes: o PostgreSQL é o SGDB mais completo e estável, e não apenas entre os livres. Talvez o IBM DB/2 para OS/360 (seja lá qual for o nome do /mainframe/ hoje) seja mais estável, mas não é tão completo.
Alunos da rede municipal participam de projeto alemão | Secretaria Municipal da Educação do Salvador
“Mesmo com 18 anos, eu nunca tinha jogado futebol com meninas”, diz David Santiago, participante do Projeto Festival de Bolas, iniciado nesta segunda-feira (9). Os meninos e meninas da rede municipal trabalharam os valores e a conscientização ambiental, em atividades conjuntas.
A ação – fruto da parceria da Secretaria Municipal de Educação (SMED), por meio da Diretoria Geral de Esportes e Lazer (DGEL), com Cooperação Alemã para o Desenvolvimento Sustentável (GIZ) e os institutos Fazer Acontecer e Pró Mundo – tem como objetivo promover a inclusão de jovens e adolescentes através da cultura e do futebol, usando o esporte como ferramenta social e de integração, e vai beneficiar 250 alunas e alunos de 8 a 18 anos.
Durante todo o dia eles participaram de atividades que envolveram onde eles criaram as próprias regras, aprenderam sobre valores, como solidariedade, cooperatividade, honestidade, respeito e espírito de equipe, mostrando que os valores são mais importantes do que o jogo em si.
A experiência de um jogo misto, com meninos e meninas no mesmo time, foi algo novo para alguns meninos, como Gabriel Borges, de 14 anos. “Eu gostei muito, porque nunca tinha jogado no meio de meninas e pude notar que elas jogam tão bem quanto a gente”, disse Gabriel, acrescentando que “aprendeu também sobre respeito, honestidade e companheirismo e que tanto menino, quanto menina, podem jogar juntos, sem preconceitos”.
Os alunos receberam instruções dos professores que participaram do curso de capacitação para coordenadores, professores e auxiliares municipais, de 19 e 24 maio, no Rio de Janeiro. No curso foram ensinadas as metodologias alemãs de futebol, com expectativa de mesclar os conhecimentos dos países em benefício dos alunos. a
Sascha Bauer, ex-treinador da seleção sub-17 de Moçambique, ministrou o curso do Rio de Janeiro e esteve acompanhando o primeiro dia do Projeto. “Essa é a parte prática para os treinadores que foram ao curso no Rio. Vamos ver como os jovens reagem à nossa estratégia de jogo. Tivemos essa experiência em outros países, mas não aqui no Brasil e acho que vamos ter um retorno muito bom”, comentou Bauer.