Uma breve apresentação sobre este fantástico Sistema Gerenciador de Banco de Dados Objeto-Relacional.
Razões para adotá-lo, curiosidades e características.
2. 2/54
About me
Juliano Atanazio
● Graduated in Computer Science for Business Management (Informática para Gestão de
Negócios), FATEC Zona Sul, São Paulo – SP;
● PostgreSQL DBA;
● Linux admin;
● Instructor (PostgreSQL);
● LPIC-1, LPIC-2 Certified;
● Linux user since 2000;
● Free Software enthusiast;
● Favorite technologies: PostgreSQL, Linux, Python, Shell Script, FreeBSD, etc...;
● Headbanger :) m/
3. 3/54
O que é
É um sistema gerenciador de banco de dados objeto-relacional
originalmente desenvolvido na Universidade da Califórnia no
Departamento de Ciências da Computação em Berkeley.
Hoje é desenvolvido e mantido pelo PGDG (PostgreSQL Global
Development Group – Grupo de Desenvolvimento Global do
PostgreSQL).
4. 4/54
O que é
Seu nome vem do Ingres, que seu código-fonte originalmente era
descendente. Por isso o nome Postgres.
Seu código-fonte é aberto.
O PostgreSQL é Software Livre :)
5. 5/54
Links
Site Oficial: www.postgresql.org
Planet PostgreSQL: http://planet.postgresql.org
Wiki: https://wiki.postgresql.org
Site da Comunidade Brasileira: www.postgresql.org.br
Planet PostgreSQL BR: http://planeta.postgresql.org.br
6. 6/54
Como se Fala e Como se Escreve
Uma dúvida comum ao PostgreSQL é seu nome. As formas
corretas são as duas seguintes:
Postgres, pronuncia-se “postígres” (sim, o “s” é pronunciado!);
PostgreSQL, pronuncia-se “postgres és quiu el”.
Nunca, jamais, em hipótese nenhuma escrever “postgree” ou
dizer “postgrí”.
Infelizmente ainda há fontes na Internet com o nome do Postgres
escrito erroneamente, o que leva muita gente também a falar
errado.
8. 8/54
Licença
A licença utilizada é uma licença própria similar à licença BSD
(herança de Berkeley).
Essa licença é mais flexível do que a GPL, permitindo inclusive
que qualquer um possa pegar seu código-fonte, alterá-lo e até
fechá-lo para fins comerciais.
Um grande exemplo disso é o derivado do PostgreSQL mais
famoso, o EDB Postgres, da EnterpriseDB [1], empresa que é
uma das grandes contribuidoras para o desenvolvimento do
projeto PostgreSQL original.
[1] https://www.enterprisedb.com/
11. 11/54
Liberdade
O PostgreSQL é Software Livre! :)
Você pode baixar, usar e / ou alterar o código-fonte como bem
entender.
Não precisa se preocupar com quantos núcleos tem seu servidor.
Totalmente livre! Livre!
O PostgreSQL é um só! Não existem versões “Light”, “Standard”,
“Advanced Server” ou mesmo “Express”... Uma única versão e
sem cortes de funcionalidades.
Todo poder do grande elefante dos dados à disposição do
usuário!
12. 12/54
Imune a Over-Deployment
Over-deployment é o que alguns fornecedores de banco de
dados proprietários consideram como problema de
inconformidade de sua licença.
Com PostgreSQL, ninguém pode processá-lo por quebra de
acordos de licenciamento, devido a não haver nenhum custo de
licenciamento associado para o software.
Seu servidor de banco de dados PostgreSQL pode ter quantos
núcleos de processador desejar.
13. 13/54
Imune a Over-Deployment
Algumas vantagens adicionais:
● Modelos de negócios mais lucrativos com implantações em
larga escala;
● Sem possibilidade de ser auditado por inconformidade de
licença em qualquer fase;
● Flexibilidade para conceituar pesquisar e tentar implantações
sem necessidade de incluir custos adicionais de licença;
● Foco em detalhes técnicos, sem a necessidade de lidar com
inconvenientes de licença.
14. 14/54
Redução de Custos de Pessoal
O PostgreSQL foi projetado e criado para ter requisitos muito
mais baixos de manutenção e ajustes do que os principais
bancos de dados proprietários, mas ainda manter todas as
características, estabilidade e desempenho.
15. 15/54
Confiabilidade e Estabilidade Lendárias
Diferente de muitos sistemas gerenciadores de banco de dados
proprietários, é muito comum organizações reportarem que o
PostgreSQL nunca falhou em anos de operação.
Nem uma única vez, ele simplesmente funciona!
16. 16/54
Extensibilidade e PGXN
É possível desenvolver extensões para o PostgreSQL de forma a
ampliar o leque de funcionalidades oferecidas.
A PGXN [1], “the PostgreSQL Extension Network”, é um sistema
de distribuição central para bibliotecas open-source de extensão
para o PostgresQL.
[1] http://pgxn.org/
17. 17/54
Projetos e Aplicativos: pgFoundry
De forma similar ao PGXN, existe o pgFoundry [1].
É um site que reúne vários projetos relativos ao PostgreSQL.
[1] http://pgfoundry.org
18. 18/54
Aplicativos Clientes
psql: Cliente padrão em modo texto;
pgcli [1]: Cliente em modo texto, escrito em Python com auto-
complete mais avançado do que o psql;
pgAdmin3 [2]: Aplicativo gráfico;
phpPgAdmin [3]: Interface web;
EMS SQL Management Studio para PostgreSQL [4]: Gráfico,
proprietário e disponível apenas para Windows;
DBeaver [5]: Aplicativo gráfico multi-plataforma escrito em Java,
depende do driver JDBC PostgreSQL.
20. 20/54
Limites do PostgreSQL
Tamanho máximo de um banco de dados: Ilimitado
Tamanho máximo de uma tabela: 32 TB
Tamanho máximo de uma linha (registro): 1.6 TB
Tamanho máximo de um campo (coluna): 1 GB
Número máximo de linhas por tabela: Ilimitado
Número máximo de colunas por tabela: 250 a 1600 dependendo
do tipo de coluna
Número máximo de índices por tabela: Ilimitado
21. 21/54
Tipos de Dados
● Numéricos;
● De Tempo;
● De Texto;
● Nulo;
● JSON;
● XML;
● Rede: IP (IPv4 e Ipv6) e mac address;
● UUID;
22. 22/54
Tipos de Dados
● Boolean;
● Enumerados;
● Geométricos;
● Busca Textual;
● Compostos;
● De Faixa (Range Types);
● Suporte a arrays...
● A variedade é muito grande e o usuário pode também criar um tipo
de dados personalizado.
23. 23/54
Funções e Procedures
Diferente de outros SGBDs, no PostgreSQL não há uma separação
entre Functions e Procedures.
É tudo Function!
Para invocar uma função é bem simples:
SELECT funcao();
24. 24/54
Funções e Procedures
Triggers: Diferente de outros SGBDs a função que o trigger chama é
definida externa a ele. E depois, na definição do trigger é feita a
chamada a essa função.
Isso permite reaproveitamento de código de forma que uma mesma
função possa atender a mais de um trigger.
A linguagem procedural padrão do PostgreSQL é a PL/pgSQL (muito
similar à PL/SQL do Oracle, porém mais amigável).
25. 25/54
Padrões SQL ISO
O core team de desenvolvimento, também conhecido como PGDG
(PostgreSQL Global Development Group) tem como premissa a
maior compatibilidade possível com os padrões SQL ISO.
https://www.postgresql.org/docs/current/static/features.html
26. 26/54
O Elefante é Poliglota
Além da linguagem procedural padrão, PL/pgSQL, temos também
opções nativas para fazermos funções em Python (PL/Python) ou
em Perl (PL/Perl), de forma nativa.
Devido à característica de extensibilidade do PostgreSQL podemos
também programar funções em Java e PHP (PL/Java e PL/PHP,
respectivamente) e outras linguagens de programação que podemos
instalar em forma de extensão.
29. 29/54
Além do SQL Básico
Common Table Expressions - Expressões Comuns de Tabela
Com a cláusula WITH fornece uma forma de escrever comandos
auxiliares para uso em uma consulta muito grande.
Esses comandos também são conhecidos como Common Table
Expressions ou CTEs, que podemos pensar como se fosse uma
definição de tabelas temporárias que existem para apenas uma
consulta.
30. 30/54
Além do SQL Básico
Common Table Expressions - Expressões Comuns de Tabela
Cada comando auxiliar em uma cláusula WITH pode ser um
SELECT, INSERT, UPDATE ou DELETE e a própria cláusula WITH é
anexada ao comando principal que pode também se um SELECT,
INSERT, UPDATE, ou DELETE.
https://www.postgresql.org/docs/current/static/queries-with.html
31. 31/54
Além do SQL Básico
Window Functions - Funções de Janela
Permitem executar cálculos através de conjuntos de linhas que são
relacionadas à linha de consulta atual.
Similar ao tipo de cálculo que pode ser feito com funções de
agregação, mas o uso de funções de janela não faz as linhas serem
agrupadas em uma única linha de saída, as linhas mantêm suas
identidades separadas.
32. 32/54
Além do SQL Básico
Window Functions - Funções de Janela
Internamente, uma função de janela é capaz de acessar mais do
que apenas linha atual de um resultado de uma consulta.
Funções de janela devem ser invocadas usando sua própria sintaxe
em que a cláusula OVER é necessária.
http://www.postgresql.org/docs/current/static/functions-window.html
33. 33/54
Além do SQL Básico
Full Text Search - Busca Textual
Capacidade de identificar uma linguagem em documentos que
satisfaçam critérios de buscas de uma consulta e opcionalmente
ordená-las por relevância.
Tem suporte linguístico e baseado no idioma que o usuário definir.
http://www.postgresql.org/docs/current/static/textsearch.html
34. 34/54
Dados Geográficos: PostGIS
A sigla GIS significa Geographic Information
System (Sistema de Informação Geográfica).
PostGIS é atualmente a melhor ferramenta
para dados geográficos em bancos de dados.
Está disponível em forma de extensão para o
PostgreSQL.
http://www.postgis.org
35. 35/54
FDW: Acessando Dados Externos
FDW é a sigla para Foreign Data-Wrapper [1].
Podemos acessar dados vindos de outros servidores PostgreSQL
ou até mesmo outros SGBDs, além de outras coisas mais.
[1] https://wiki.postgresql.org/wiki/Foreign_data_wrappers
36. 36/54
Multi Paradigma
Relacional e NoSQL
O PostgreSQL não é somente relacional.
Ele agrega também funcionalidades NoSQL.
O tipo de dado jsonb [1] o que implementa funcionalidades NoSQL
do tipo documento (como MongoDB por exemplo).
[1] https://www.postgresql.org/docs/current/static/datatype-json.html
37. 37/54
O PostgreSQL é Bala de Prata?
Atualmente é SGBD mais avançado devido à quantidade de
recursos que oferece;
Duvida??? Basta comparar → [1]
Apesar disso ele não deve ter uma utilização forçada, pois há
determinadas coisas que outros SGBDs são melhores. Isso é fato.
[1] http://www.sql-workbench.net/dbms_comparison.html
38. 38/54
O PostgreSQL é Bala de Prata?
Para aplicações embarcadas; o SQLite, um simples blog, algo que
não envolva um sistema necessariamente transacional
predominantemente texto; o MariaDB e em outras situações;
SGBDs NoSQL são mais apropriados.
39. 39/54
O PostgreSQL é Bala de Prata?
Mas o Postgres conversa (se integra) com todo mundo…
Via FDW pode-se extrair o que é melhor de cada SGBD e então o
Postgres funcionará como um middleware deixando transparente
para a aplicação ;)
https://wiki.postgresql.org/wiki/Foreign_data_wrappers
https://www.postgresql.org/docs/current/static/postgres-fdw.html
41. 41/54
WAL - Write Ahead Log
Mecanismo que assegura a integridade dos dados.
Qualquer escrita em banco antes de ser gravada nos arquivos de
dados é gravada nos logs de transação (xlogs).
Isso permite que se houver uma falha (crash) do servidor, ao
reinicializá-lo, o servidor lerá primeiro os logs de transação e então
aplicará aos arquivos de dados (também conhecidos como arquivos
físicos) todas modificações não feitas ainda.
42. 42/54
WAL - Write Ahead Log
O log existe primariamente para propósitos de segurança contra
falhas: se o sistema falha (crash), a base de dados pode ser
restaurada consistentemente pela aplicação das entradas de log
feitas desde o último checkpoint*.
*checkpoint é quando os dados que estão em memória e nos logs
de transação são efetivados nos arquivos físicos.
https://www.postgresql.org/docs/current/static/wal-intro.html
43. 43/54
PITR: A Máquina do Tempo
PITR é uma sigla que significa Point In Time Recovery, que em
português seria algo como “Recuperação em um Ponto no Tempo”.
Pode-se estipular um ponto anterior no tempo e fazer o servidor
voltar seus dados como estavam nesse dado momento caso houver
necessidade.
https://www.postgresql.org/docs/current/static/continuous-archiving.html
44. 44/54
Replicação
Física (via streaming);
● Assíncrona;
● Síncrona;
Lógica (pglogical)
● Integral;
● Parcial;
● Muito útil para fazer migrações de uma versão para outra.
Ambas permitem cascateamento.
45. 45/54
Desenvolvimento
O PostgreSQL é desenvolvido em conjunto pela comunidade e por
empresas que o apoiam.
A cada ano uma versão nova é liberada trazendo novos recursos,
melhora de performance e correções de eventuais bugs.
46. 46/54
Versões e Ciclo de Desenvolvimento
Modelos de Versão X.Y.Z e X.Y
Até a versão 9.6 o PostgreSQL adotou o modelo X.Y.Z, em que X.Y
era a versão majoritária e Z e a versão minoritária;
A partir da versão 10, o modelo passa a ser simplesmente X.Y, em
que X é a versão majoritária e Y a versão minoritária;
Em ambos os modelos o último número diz respeito à versão
minoritária.
47. 47/54
Versões e Ciclo de Desenvolvimento
Versão Majoritária
É a parte significativa do número da versão;
São lançamentos de versões que trazem novidades como novos
recursos;
Cada versão lançada tem suporte de até cinco anos, após isso não
são mais lançados quaisquer patches para a mesma.
Versão Minoritária
Diz respeito a apenas correções de bugs e de segurança.
51. 51/54
Conclusão
O PostgreSQL é robusto, flexível,
rico em recursos, torna mais fácil
a vida do programador e do
próprio DBA devido à sua
facilidade de programar e
administrar.
Sua licença permissiva permite
reduzir custos podendo
perfeitamente substituir uma
solução proprietária de forma
profissional e eficaz.
Então por que não usar? :)
52. 52/54
Donate!
The elephant needs you!
O Elefante precisa de você!
Contribute! :)
Contribua! :)
http://www.postgresql.org/about/donate/
54. 54/54
See you soon!!!
Até a próxima!!!
Juliano Atanazio
juliano777@gmail.com
http://slideshare.net/spjuliano
https://speakerdeck.com/julianometalsp
https://juliano777.wordpress.com
:)