Este material não é um curso ou parte de nenhum curso ou treinamento. Foi elaborado com o único objetivo de transferir conhecimentos adquiridos em estudos autônomos e também adquiridos durante o curso Administração de Banco de Dados com PostgreSQL ministrado por Fábio da Luz Caiut na Escola Superior de Redes (ESR) da Rede Nacional de Pesquisa (RNP) em Brasília/DF.
Automatizando o Preenchimento de Formulários Web Utilizando IMacros for Firefox
PostgreSQL - Visão Geral - Pedro Vieira
1. PostgreSQL - Visão Geral
Pedro Fernandes Vieira
http://pt.scribd.com/pedrofvieira
Salvador - Bahia - Brasil
Julho/2014
2. PostgreSQL - Visão Geral
PostgreSQL: Introdução e Conceitos
● Sistema de Gerenciamento de Banco de Dados Relacional;
● Código aberto; Multi-plataforma; Bom desempenho;
● Instalação do Servidor;
● Arquitetura multiprocessos (Postmaster, Checkpointer, Writer,
WAL Writer, Backends);
● Organização Lógica e Física dos Dados;
● Utiliza o modelo cliente-servidor para interagir com
usuários/sistemas;
● Log de transação (Write Ahead Log - WAL) X Log de
erros/informações (Logger);
● Multiversion Concurrency Control (MVCC);
● Backup com possibilidade de Point-in-Time recovery PITR;
● Replicação;
● Monitoramento e Desempenho;
● Boa práticas.
http://pt.scribd.com/pedrofvieira
3. Sistema de Gerenciamento de Banco de Dados Relacional
Implementa a maior parte do padrão SQL: 2011
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
4. PostgreSQL: Instalação do servidor
● O “Core” do PostgreSQL está disponível de várias formas
○ Pacotes binários pré-construídos (packages) estão disponíveis para vários sistemas
operacionais (BSD, FreeBSD, OpenBSD, Red Hat, CentOS, Debian, Ubuntu, SuSE,
OpenSuSE, Mac OS X, Solaris, Windows) e arquiteturas (x86_64 bits, x86 32 bits,
■ pode-se baixar e instalar pacotes binários específicos para o sistema
operacional/arquitetura a partir repositórios acessados através de APT-GET
(Ubuntu, Debian) ou YUM(Red Hat, centOS)
■ ou baixar arquivos binários RPM ou Deb preparados especificamente para cada
distribuição;
■ Para WIndows e Mac OS X existem instaladores gráficos específicos.
○ Existem versões montadas por terceiros (third party builds) que incluem o Postgres:
BigSQL, PostgreSQL Live CD, Turnkey PostgreSQL, BitNami LAPP, MAPP ou WAPP;
○ Para usuários mais experientes pode-se também fazer a instalação através da
compilação do código fonte que pode ser baixado no FTP ou GIT do projeto;
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
5. PostgreSQL: Instalação do servidor
● Instalações com pacotes binários ou
distribuições de terceiros
○ Prós: fácil e rápida instalação;
○ Contras: utilizada uma
configuração pre-definida que
pode não ser a desejada;
# apt-get install postgresql
# modificar arquivos de configuração (postgresql.
conf e pg_hba.conf)
● Instalações a partir do código fonte
○ Prós: configuração pode ser
customizada conforme
desejado; Utilização melhor
dos recursos disponíveis;
○ Contras: mais complexa.
# baixar código fonte e dependências
# configurar, compilar e instalar
# criar usuário postgres (sistema operacional) e
conceder permissões
# criar área de dados PG_DATA
# modificar arquivos de configuração (postgresql.
conf e pg_hba.conf)
# configurar inicialização automática do
PostgreSQL
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
7. PostgreSQL: Organização Física dos Dados
● Por padrão o PostgreSQL armazena e organiza os
dados e informações de controle (log de transações
WAL, logs de erros e arquivos de configuração) sob
o PGDATA, a área de dados;
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
8. PostgreSQL: Organização Física dos Dados
● Tablespaces são locais no sistema de
arquivos onde se armazena os
arquivos de dados, ou seja, tablespace
é um diretório.
● Por padrão são criados dois
tablespaces:
○ pg_default (no diretório
PGDATA/base) - destino default
de todas as bases de dados
criadas;
○ pg_global (no diretório
PGDATA/global) - contém os
objetos que são compartilhados
entre todas as bases, incluindo o
catálogo de sistema;
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
9. PostgreSQL: Organização Física dos Dados
● Se a instalação for feita através de código fonte, pode-se iniciar a área de dados PGDATA
em um disco diferente do disco do sistema operacional e do Core do PostgreSQL;
● As bases de dados podem ser armazenadas em outros discos através do uso de
TABLESPACES, porém as referências a elas continuarão sob a área de dados PGDATA;
● Os arquivos de logs de transações WAL podem ser armazenados fora da PGDATA através
do uso de links simbólicos sob a área de dados PGDATA;
● Os arquivos de logs de erros e informações podem ser armazenados fora da PGDATA
apenas modificando o arquivo de configurações postgresql.conf;
● Dependendo da versão ou da forma de instalação os arquivos de configurações () podem
estar dentro ou fora da PGDATA;
Mesmo que se tenha uma instalação com dados/logs/configurações em locais diferentes o
PGDATA é o coração do PostgreSQL
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
10. PostgreSQL: Organização Lógica dos Dados
● Um servidor ou instância do PostgreSQL pode conter diversas Bases de Dados. Estas Bases
de Dados podem conter schemas que conterão os objetos de banco de dados (tabelas,
índices, etc).
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
11. PostgreSQL: Organização Lógica e Física dos Dados
● Um mesmo servidor poderá ter 2 ou mais instâncias de PostgreSQL, geralmente de versões
diferentes, que são consideradas como instalações diferentes (Core, PGDATA, etc);
● Em uma instalação típica, no momento da criação da PGDATA, três bases de dados são
criadas:
○ template0, usado para recuperação pelo próprio PostgreSQL;
○ template1, serve como modelo para novas bases de dados;
○ postgres, criada para conectar-se por padrão (não obrigatório mas pode ser necessário
em algumas ferramentas);
● Na criação de nova base de dados as principais opções são:
○ OWNER, o usuário que pode criar schemas e objetos além de poder dar permissões;
○ TEMPLATE, por padrão é o template1 mas pode ser utilizada outra;
○ ENCODING, define o conjunto de caracteres utilizado no armazenamento;
○ TABLESPACE, por padrão é o pg_default mas pode ser definido outro;
● Uma nova base de dados pode ser criada através da instrução CREATE DATABASE (DDL)
ou através de um utilitário de linha de comando createdb;
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
13. PostgreSQL: Modelo cliente-servidor para interagir com usuários/sistemas
● Ao efetuar uma conexão com o PostgreSQL (local ou remotamente) serão verificadas as
configurações do arquivo pg_hba.conf; Este arquivo controla: quais hosts têm permissão de
conectar, como os clientes são autenticados, nomes dos usuários que podem se conectar e
quais bancos eles podem acessar.
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
host all all IP_DO_SERVIDOR_GLASSFISH/32 md5
host all all MASCARA_DA_SUBREDE/24 md5
host all all MASCARA_DE_OUTRA_SUBREDE/16 md5
TYPE é o tipo de conexão: "local" para Unix-domain socket, "host" para plain ou SSL-encrypted TCP/IP socket, "hostssl" somente SSL-
encrypted TCP/IP socket, e "hostnossl somente plain TCP/IP socket.
METHOD é o método de autenticação: “trust” não necessita senha, “password” envia a senha no formato texto, “md5” envia a senha
encriptada. “ident” obtém o nome do usuário do sistema operacional. Para conexões TCP/IP contacta o servidor ident no cliente. Para
conexões locais, recebendo este do sistema operacional. “peer” comparando o usuário do SO com o usuário do banco de dados.
● Ao efetuar uma conexão com uma base de dados não será possível acessar os objetos de
outras base de dados do servidor ou instância.
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
14. PostgreSQL: Log de transação (Write Ahead Log - WAL)
Arquivos de WAL (no
diretório PGDATA/pg_xlog)
Arquivos de Dados (nos
diretórios das tablespaces:
PGDATA/base,
PGDATA/global, etc)
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
15. PostgreSQL: Multiversion Concurrency Control (MVCC)
● O PostgreSQL gerencia a
concorrência entre transações
através de um método conhecido
como Multiversion Concurrency
Control (MVCC), que dá a cada
transação um "snashot" do banco
de dados, permitindo que
alterações sejam feitas sem ser
visíveis para outras transações até
que as alterações sejam
confirmadas. MVCC não é
exclusivo do PostgreSQL, é uma
técnica utilizada em outros
SGBDs.
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
16. PostgreSQL: Backup e Recuperação
● Existem duas abordagens diferentes para fazer backup de dados PostgreSQL:
Dump ou Backup
Lógico
● Snapshot no início do backup e não considera as
alterações durante o processo;
● Não precisa parar o servidor;
● Portáveis podendo ser restaurado em versões diferentes
● Formato binário ou script SQL;
● Possível especificar base de dados, schema e tabelas que
devem ser feitas backup.
Backup Contínuo ou
Backup Físico
● Backup da instância inteira;
● Backup Base + Arquivamento de WALs;
● Permite Point-in-Time Recovery;
● Permite replicação por Log Shipping;
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
17. PostgreSQL: Replicação
● Existem uma série de ferramentas que implementam replicação mas o PostgreSQL possui
duas formas nativas de replicações assíncronas:
Log Shipping
(desde a
versão 8.2)
● Envio dos arquivos de logs de transações WALs para serem
aplicados em outro servidor (réplica);
● Nível de replicação Warm Standby onde a réplica (slave) não pode
ser acessado ficando apenas para contigência em caso de falha do
servidor principal (master);
● Tempo de atraso maior (processo de cópia, etc).
Streaming
Replication
(desde a
versão 9)
● Os dados são replicados logo que são comitados;
● Nível de replicação Hot Standby onde a réplica pode ser utilizada
em operações de leitura;
● Menor atraso na propagação dos dados;
● Comunicação entre serviços do próprio PostgreSQL;
● Simplicidade de configuração;
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
18. PostgreSQL: Monitoramento e Desempenho
● Muitas ferramentas usadas para monitoramento de serviços
PostgreSQL são as mesmas utilizadas para monitoramento de
ambientes unix/linux/windows (nagios, cacti, zabbix);
● Devemos monitorar como andam os processos do SO
relacionados ao PostgreSQL, analisar situações de tráfego de
I/O, e também outros recursos disponibilizados no servidor
como CPU, memória, disco, etc;
● Devemos monitorar também como andam as transações de
banco de dados e possíveis processos bloqueados (por outro
processos ou por operações de I/O);
● A partir do acompanhamento dessas informações devemos
fazer ajustes algumas vezes na infraestrutura do servidor
(recursos e sistema operacional) outras vezes em
configurações do postgres ou sistema operacional e até
mesmo na modificação das aplicações.
Ciclo de Tunning
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
19. PostgreSQL: Boas Práticas
● Efetuar instalação a partir de código-fonte;
● Utilize uma base de dados e diversos schemas para organizar os dados mas permitindo o
acesso durante uma mesma conexão;
● Conceder permissões para grupos (ROLE);
● Forneça acesso somente o que for necessário tanto para os objetos de dados quanto para as
configurações de conexão (pg_hba.conf);
● Fazer backup de arquivos de configuração;
● Ao fazer atualização da versão do PostgreSQL:
○ Minor version: novos programas compilados;
○ Major version: backup -> atualização -> restore;
● Mantenha o Autovacuum habilitado;
● Faça Backup Contínuo que possibilita o Point-inTime Recovery;
● Configure o ambiente para replicação do tipo Streaming Replication e implemente
balanceamento de carga:
○ Servidor Master - todo o tipo de operações;
○ Servidor Slave - operações de leitura.
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
20. PostgreSQL: Links úteis
Página oficial do projeto PostgreSQL
www.postgresql.org
Wiki oficial
https://wiki.postgresql.org/wiki/Main_Page
Blogs
http://planet.postgresql.org/
www.postgresqltutorial.com
Obrigado!!
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira
21. Este material não é um curso ou parte de nenhum curso ou treinamento. Foi elaborado com o único
objetivo de transferir conhecimentos adquiridos em estudos autônomos e também adquiridos
durante o curso Administração de Banco de Dados com PostgreSQL ministrado por Fábio da Luz
Caiut na Escola Superior de Redes (ESR) da Rede Nacional de Pesquisa (RNP) em Brasília/DF.
Para maiores informações sobre o curso citado pesquise no endereço eletrônico http://esr.rnp.
br/des6
PostgreSQL - Visão Geral
http://pt.scribd.com/pedrofvieira