Slide 1

Slide 1 text

Juliano Atanazio Por que PostgreSQL? Por que PostgreSQL?

Slide 2

Slide 2 text

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/

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

7/54 Multi Plataforma ● Linux ● BSDs ● Solaris ● HPUX ● Irix ● AIX ● Unix ● MacOS ● Windows etc...

Slide 8

Slide 8 text

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/

Slide 9

Slide 9 text

9/54 Suporte Comunidade Brasil: https://listas.postgresql.org.br/cgi-bin/mailman/listinfo Internacional: https://lists.postgresql.org Comercial Há várias empresas ao redor do mundo (inclusive no Brasil) que prestam consultoria em PostgreSQL.

Slide 10

Slide 10 text

10/54 Suporte Documentação Oficial http://www.postgresql.org/docs/

Slide 11

Slide 11 text

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!

Slide 12

Slide 12 text

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.

Slide 13

Slide 13 text

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.

Slide 14

Slide 14 text

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.

Slide 15

Slide 15 text

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!

Slide 16

Slide 16 text

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/

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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.

Slide 19

Slide 19 text

19/54 Aplicativos Clientes [1] http://pgcli.com/ [2] http://pgadmin.org/ [3] http://phppgadmin.sourceforge.net/ [4] http://www.sqlmanager.com.br/html/studio_postgresql.html [5] http://dbeaver.jkiss.org/

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

21/54 Tipos de Dados ● Numéricos; ● De Tempo; ● De Texto; ● Nulo; ● JSON; ● XML; ● Rede: IP (IPv4 e Ipv6) e mac address; ● UUID;

Slide 22

Slide 22 text

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.

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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.

Slide 27

Slide 27 text

27/54 Drivers para Linguagens Python: psycopg2 [1] Java: JDBC [2] Perl: DBI:Pg [3] C: libpq [4] PHP: PDO [5] C#: Npgsql [6] C++: libpqxx [7] Lua: LuaPgSQL [8] Ruby: Ruby pg [9] Go: pq [10] Node.js: node-postgres [11] Rust: Rust-Postgres [12]

Slide 28

Slide 28 text

28/54 Drivers para Linguagens [1] http://initd.org/psycopg [2] https://jdbc.postgresql.org [3] https://metacpan.org/pod/DBD::Pg [4] http://www.postgresql.org/docs/current/static/libpq.html [5] http://php.net/manual/pt_BR/ref.pdo-pgsql.connection.php [6] http://www.npgsql.org [7] http://pqxx.org/development/libpqxx [8] https://github.com/arcapos/luapgsql [9] https://github.com/ged/ruby-pg [10] https://github.com/lib/pq [11] https://github.com/brianc/node-postgres [12] https://github.com/sfackler/rust-postgres

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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.

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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.

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

40/54 O PostgreSQL é Bala de Prata? Application Server

Slide 41

Slide 41 text

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.

Slide 42

Slide 42 text

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*. *chepoint é 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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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.

Slide 45

Slide 45 text

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.

Slide 46

Slide 46 text

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.

Slide 47

Slide 47 text

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.

Slide 48

Slide 48 text

48/54 Eventos Internacional: PgCon → https://www.pgcon.org Nacional: PgBr → http://pgbr.postgresql.org.br Regional: PgDay → http://www.postgresql.org.br/eventos/pgday

Slide 49

Slide 49 text

49/54 Recursos Técnicos Veja no link abaixo a Matriz de Recursos conforme a versão do PostgreSQL: http://www.postgresql.org/about/featurematrix

Slide 50

Slide 50 text

50/54 Quem Utiliza o PostgreSQL

Slide 51

Slide 51 text

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? :)

Slide 52

Slide 52 text

52/54 Donate! The elephant needs you! O Elefante precisa de você! Contribute! :) Contribua! :) http://www.postgresql.org/about/donate/

Slide 53

Slide 53 text

53/54 Save our planet!

Slide 54

Slide 54 text

54/54 See you soon!!! Até a próxima!!! Juliano Atanazio [email protected] http://slideshare.net/spjuliano https://speakerdeck.com/julianometalsp https://juliano777.wordpress.com :)