Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
com
4Linux
também é
consultoria, suporte
e desenvolvimento.
Você já deve nos conhecer pelos melhores cursos de linux do Brasil mas a
4Linux também é consultoria, suporte e desenvolvimento e executou alguns
dos mais famosos projetos do Brasil utilizando tecnologias “open software”.
Você sabia que quando um cidadão faz uma aposta nas loterias, saca dinheiro em
um ATM (caixa eletrônico), recebe um SMS com o saldo de seu FGTS ou simula o valor
de um financiamento imobiliário no “feirão” da casa própria, ele está usando uma
infraestrutura baseada em softwares livres com consultoria e suporte da 4Linux?
Serviços
Consultoria: Suporte Linux e Open Source: Desenvolvimento de Software:
Definição de Arquitetura, tunning em Contratos com regimes de atendi- Customização visual e funcional de
banco de dados , práticas DEVOPS, mento – preventivo e/ou corretivo - softwares Open Source, consultoria para
metodologias de ensino on-line, em horário comercial (8x5) ou de a construção de ambiente ágeis de
soluções open source ( e-mail, monito- permanente sobre-aviso (24x7) para Integração Contínua (Java e PHP) e
ramento, servidor JEE), alocação de ambientes de missão crítica. Suporte mentoria para uso de bibliotecas, plata-
especialistas em momentos de crise e emergencial para ambientes construí- formas e ambientes Open Source.
auditoria de segurança. dos por terceiros. Parceiro Oficial Zend.
Parceiros Estratégicos
Saiba mais
www.4linux.com.br/suporte
contato@4linux.com.br
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características e Instalação
do PostgreSQL
Curso 801
Administração
PostgreSQL com
Alta Performance e
Alta Disponibilidade
Versão 4.1
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
Características e Instalaçãodo
e Instalação doPostgreSQL
MySQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Origem do PostgreSQL
Microsoft
Berkeley INGRES
CA Ingres Corp.
1970 1984 1987 1995 2016
INGRES hoje
Stonebraker e Wong criaram a RTI-Ingres. Em 1994 o então Ingres se tornou
propriedade da Computer Associates. Em 2004 alguns componentes do Ingres foram
liberados sob três licenças diferentes de código livre.
Em 2005 foi criada a Ingres Corporation. Ela mantém suporte ativo ao código
fonte e usuários até hoje.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Pronúncia e escrita
www.postgresql.org/community
www.postgresql.org.br/comunidade
Finalmente, PostgreSQL
●
1997 PostgreSQL 6.0 com a inclusão do MVCC(Multiversion Concurrencu Control) e
novos datatypes de data, hora e tipos e geométricos.
● 2000 PostgreSQL 7.0 WAL(Write Ahead Log), schemas, indexação por texto.
●
2005 PostgreSQL 8.0 Suporte para Microsoft Windows, tablespaces, PITR.
Características do PostgreSQL
Características atuais
O PostgreSQL é considerado o banco de dados livre mais avançado do mundo
por várias razões. Suporta largamente o padrão ANSI-SQL 2008 e respeita a norma
ACID. É altamente extensível, tem vários tipos de índices para diversas aplicações.
Pode ser instalado na maioria dos sistemas operacionais tipo Unix como Linux,
Solaris, AIX, HP-UX, família BSD, Mac OS X, True 64, etc. Atualmente conta também
com porte nativo para Windows.
Atomicidade Consistência
Isolamento Durabilidade
Versionamento do PostgreSQL
Atualizações minoritárias
Versionamento
Sendo um projeto comunitário, o PostgreSQL provê atualizações através do
site oficial www.postgresql.org. Se o pacote instalado for fornecido diretamente pelo
seu S.O., verifique as opções de atualização disponíveis.
As versões do PostgreSQL são divididas em majoritárias e minoritárias. As
versões majoritárias são identificadas pelos primeiros dois números da versão,
também chamadas de série. As versões minoritárias são identificadas pelo último
número da versão.
Uma versão majoritária é lançada a cada, aproximadamente, um ano, após
extensivos testes Novas versões majoritárias costumam incluir novas
funcionalidades ao PostgreSQL, que são normalmente discutidas nas listas
internacionais de discussão, na página wiki do Roadmap e debatidas e aprovadas
na reunião de desenvolvedores, que ocorre em paralelo ao evento PgCon, no
Canadá, no mês de maio de cada ano.
Um exemplo de versão minoritária disponível atualmente (em maio de 2015)
é a 9.4.1, significando que têm todas as funcionalidades da série 9.4.x, sendo que
existe somente 1 versão de correção foi lançada.
As versões majoritárias atualmente disponíveis para download estão
disponíveis no link: https://www.postgresql.org/ftp/source/
Nota
Atualmente (2016) as versão suportadas são da 9.1 até a 9.6, versão anteriores a
9.1 não são mais suportadas pela comunidade, nestes casos é extremamente
recomendável a atualização para uma das versões mais novas e suportadas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
● Todo sistema operacional possui uma estrutura de diretórios definida por seus
desenvolvedores;
● A versão do PostgreSQL será fixada pelo fornecedor ou comunidade.
Pacotes em www.postgresql.org
● Não estão disponíveis para todos os S.O. ou todas as variantes e versões do S.O.;
●
Exige a presença do compilador C e código fonte das bibliotecas necessárias;
● Permite a maior customização;
# aptget
# dpkg
10
● Não estão disponíveis para todos os S.O. ou todas as variantes e versões do S.O.
●
Para distribuições GNU/Linux estão disponíveis repositórios para apt e yum,
distribuições recentes baseadas em Debian e Red Hat, respectivamente. Os
repositórios são completos e disponibilizam todas as versões suportadas do
PostgreSQL, bem como módulos contrib e outras ferramentas acessórias em
versões atuais como o PgAdmin 3, Slony, etc.
● Existe o one-click installer para Linux disponibilizado pela empresa EnterpriseDB.
+ deb http://apt.postgresql.org/pub/repos/apt/ jessiepgdg main
2# wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
3# aptkey add ACCC4CF8.asc
11
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2 # ls l /usr/lib/postgresql/9.6/bin
12
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2# systemctl status postgresql
4$ /usr/lib/postgresql/9.6/bin/pg_ctl stop # Como “postgres”
6$ /usr/lib/postgresql/9.6/bin/pg_ctl start # Como “postgres”
13
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
# rpm # yum
14
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
4# whereis pg_dump
5# whereis psql
15
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
1 # /usr/pgsql9.6/bin/postgresql96setup initdb
2 Faça com que o serviço do PostgreSQL inicie no boot do SO:
2# systemctl enable postgresql9.6
3# systemctl start postgresql9.6
16
Vários clusters poderão estar rodando ao mesmo tempo, como várias instâncias,
se estiverem configurados para “escutarem” em portas TCP diferentes, definidos no
arquivo de configuração ou linha de inicialização da instância.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Compilando o PostgreSQL
O procedimento é manual;
Procedimento mais complexo;
É necessário instalar pacotes de compilação;
É necessário ter um entendimento sobre a
arquitetura do PostgreSQL;
17
zlib1gdev
3 Descompacte o pacote do postgres 9.2.1 e faça a compilação:
4# tar vzxf postgresql9.2.1.tar.gz
5# cd postgresql9.2.1
6# ./configure prefix=/var/lib/postgresql/9.2
7# make
8# make install
18
2) Instalar os pacotes para compilação de acordo com o SO, ex: gmake, build-
essential, libreadline6-dev, zlib1g-dev, etc.
Com esse comando é possível ver a lista das flags, dentre as flags de compilação
mais utilizadas estão:
--bindir=DIR
--sysconfdir=DIR
--with-blocksize=BLOCKSIZE
--with-pam
--with-ldap
Amorim Weverton Rufino De / weverton.geek@gmail.com
19
1# su postgres
2$ initdb D /var/lib/postgresql/9.2/main/
3$ pg_ctl D /var/lib/postgresql/9.2/main l logfile start
4 =# select version();
20
O usuário postgres
O usuário postgres do banco de dados não pode ser removido. Com ele, é
possível fazer uma recuperação de outros usuários em caso de emergência. Não
se recomenda que se utilize regularmente o usuário postgres para as tarefas
administrativas do banco de dados, muito menos utilizá-lo para tarefas de usuário
ou aplicações.
COMPILAÇÃO
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
25
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
3 postgres=# select count(*) from pg_database;
26
where setting = 'psql';
3 Selecione os campos table_owner e table_name da tabela pg_tables
onde o schemaname seja igual a ‘pg_catalog’ e o table_name
termine com a letra c:
3postgres=# select tableowner, tablename from pg_tables
where schemaname = 'pg_catalog'
and tablename like '%c';
27
Recapitulando
28
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
Estrutura Física eeLógica
Instalação
do do MySQL
PostgreSQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
30
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Estrutura do PostgreSQL
Cluster
Tablespace Tablespace
Database Database
31
Cluster: É equivalente a uma instância de banco de dados que é composta pela infra
(processos, diretórios e arquivos) que dá sustentação os dados do PostgreSQL.
Índices: São objetos que faz o mapa das tuplas presentes nas tabelas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito de Cluster
32
●
O diretório precisa estar vazio;
● Pode ser criado mais de um Cluster por servidor em portas e diretórios diferentes;
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Dados = “/var/lib/postgresql/[versão]/main”;
Configuração = “/etc/postgresql/[versão]/main”;
34
/etc/postgresql/[versão]/main
●Um arquivo de inicialização estará em:
/etc/rc2.d/
/usr/pgsql9.5/bin/postgres
Amorim Weverton Rufino De / weverton.geek@gmail.com
commit;
●pg_multixact - Subdiretório. Contém dados sobre o estado multitransacional.
Usado para shared row locks;
●
pg_stat_tmp - Subdiretório. Arquivos temporários do sub-sistema de
estatísticas;
●pg_subtrans - Subdiretório. Dados de estado de sub-transações;
●pg_twophase - Subdiretório Contém arquivos de estado para prepared transactions;
Conceito de Tablespace
37
Tablespace
3# chmod 700 /tbsdexter
6=# CREATE TABLESPACE tbsdexter LOCATION '/tbsdexter';
3 Liste as tablespaces:
7 =# \db
38
Tablespace e o DBA
39
É importante notar que tablespaces são entidades físicas, portanto não faz
sentido dizer que uma tablespace está dentro de um banco de dados, embora um
banco de dados possa estar "contido" em uma tablespace, outros objetos como
tabelas e índices isolados também podem. Não misturar as entidades físicas com as
lógicas.
postgres
Catálogos do sistema;
Dicionário de dados;
template1
Utilizado como template na criação de um database;
Pode ser customizado para criação dos Dbs;
template0
Backup do template1;
Jamais deve ser alterado;
40
postgres
O banco de dados "postgres" está disponível para ser utilizado como primeira
conexão ao cluster, logo após ser criado. Ele pode ser removido, desde que existam
outros bancos de dados disponíveis para conexão. Não se recomenda utilizar o banco
"postgres" no cotidiano para conter seus objetos de banco de dados, porém, ele pode
permanecer no cluster como um banco de conexão de emergência caso não se
lembre o nome de outros bancos disponíveis.
template1
O banco de dados template1 é o modelo que é utilizado por padrão na criação
de novos bancos de dados. Neste banco de dados, o administrador pode criar novos
objetos e fazer outras modificações, que serão automaticamente copiados para os
novos bancos de dados criados a partir de então.
template0
O banco de dados template0 é um modelo, similar ao template1, porém
recomenda-se jamais mexer nele ou removê-lo. Em caso de necessidade de se criar
um novo banco template1, por exemplo, pode-se utilizar este "modelo mínimo"
template0, e a única forma de criar um banco template0 é recriando o cluster.
Amorim Weverton Rufino De / weverton.geek@gmail.com
4 Liste os diretórios:
5=# \! ls la /var/lib/postgresql/9.6/main/pg_tblspc
41
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito de Schemas
42
Schemas
São úteis para criar uma separação de objetos de aplicações diferentes que
compartilham o mesmo banco de dados, gerenciar grupos e usuários similares de
objetos diferentes e organizar bancos de dados com muitas tabelas.
Afim de permitir que tabelas fora do schema default sejam acessadas sem a
nomenclatura citada acima pode-se alterar o search_path padrão para o schema que
se deseja trabalhar automaticamente.
SET search_path = '[nome do schema]';
CREATE SCHEMA [nome];
Tabelas e índices
Tabelas
Tabelas
● Tabelas é uma estrutura com uma ou mais colunas utilizada para armazenamento
de dados;
● Para cada coluna de uma tabela um tipo de dado a ser inserido deve ser
associado;
● Uma ou mais colunas podem ser referenciadas entre as tabelas;
●
O PostgreSQL é responsável pelo gerenciamento das versões das tuplas
armazenadas nas tabelas.
Índices
● Índices são estruturas associadas a uma ou mais colunas de uma tabela com
● Cabe ao DBA identificar quais colunas precisam ou não de índices e qual tipo de
CREATE INDEX [ nome do indice ] ON [ tabela ] ( [ colunas ] )
● Para recriar índices:
REINDEX [ indice | tabela | database ]
Amorim Weverton Rufino De / weverton.geek@gmail.com
3=# CREATE SCHEMA financeiro;
4=# CREATE TABLE secretaria.turma (id int);
5=# CREATE TABLE financeiro.mensalidade (pagamento boolean);
8=# \dt+ secretaria.*
44
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Syntax:
CREATE INDEX nome_indice
ON tabela (coluna);
2 =# CREATE TABLE financeiro.turma (descricao text);
45
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Recapitulando
48
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
Gerenciamento e Instalação do MySQL
do PostgreSQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Gerenciamento do PostgreSQL
Objetivos da Aula
50
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
51
Não desejamos parar nossos bancos de dados nunca, mas é claro que várias
situações podem requerer esta tarefa. Um SGBD como o PostgreSQL terá:
Arquivos abertos – centenas ou até milhares de arquivos estão abertos em
disco quando bancos de dados estão transacionando.
Conexões de rede – sockets estão em uso, com clientes locais e/ou remotos
conectados.
Transações estão em andamento – a norma ACID prevê que as coisas
comecem, acontecem e terminem, tudo isso tem um intervalo de tempo.
Semáforos estão alocados – SGBDs multiprocesso utilizam o recurso de
semáforos do sistema operacional para controlar os processos que estão ocupando o
tempo de CPU e a comunicação entre eles.
Memória compartilhada está alocada – o desenho multiprocesso faz com que
uma área de memória esteja alocada para compartilhamento de todos os processos.
Considerando os itens acima, ao parar o cluster todos os recursos devem ser
liberados corretamente, caso contrário, o sistema operacional poderá não funcionar a
contento após uma parada do SGBD por esgotamento de recursos. O cluster pode
até não conseguir mais ser inicializado.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Parada smart
É a forma de parada mais segura, porém nem sempre viável, ao receber uma
solicitação de parada smart, o PostgreSQL aguardará que todas as transações
correntes sejam finalizadas, todas as sessões (conexões) abertas sejam encerradas
e, caso exista, um backup em andamento também será aguardado.
O uso da parada smart em ambientes complexos pode ser difícil ou até
impossível. Servidores de aplicação, pools de conexão, middlewares entre os
usuários e o banco de dados, scripts de automação rodando e até mesmo se algum
usuário deixou o psql ou pgAdmin abertos podem fazer com que o cluster não pare.
Será então necessário que todas as aplicações e clientes sejam parados
primeiro para que, em seguida, possa ser utilizada a parada smart.
Parada fast
Parada immediate
Só deve ser utilizada em último caso. A parada immediate faz tudo o que a parada
fast faz, só que encerra todos os processos abruptamente, sem liberar corretamente os
recursos do sistema operacional. É equivalente a uma falha catastrófica.
Ao ser iniciado novamente, o PostgreSQL fará a releitura dos arquivos WAL
presentes no diretório pg_xlog, para garantir a gravação correta de todas as transações
finalizadas até o momento da parada.
A parada immediate tem utilidade caso o servidor esteja passando por problemas,
por exemplo, processos presos, e a parada fast não estiver funcionando.
Pode ser necessário utilizar comandos do sistema operacional para liberar
recursos não liberados pela parada, especialmente semáforos do Solaris.
Uso do kill
Os sinais de kill devem ser enviados ao processo pai postgres, nunca aos demais.
Caso um sinal de kill inadequado seja enviado a um processo de conexão (backend)
todo o seu cluster poderá falhar catastroficamente por corrupção da memória
compartilhada.
O processo postgres é o orquestrador e pai dos demais processos (que são forks
dele), portanto, ele possui rotinas capazes de interpretar os sinais kill. O pg_ctl faz todo
esse trabalho, por isso, prefira utilizá-lo sempre.
Utilização do pg_ctl
Execute os comandos abaixo no servidor dbmaster:
1 O pg_ctl não está no path, crie um link para que ele fique acessível:
1 # ln s /usr/lib/postgresql/9.6/bin/pg_ctl /bin/
2 Com o usuário postgres faça o stop smart e acompanhe os logs:
2 $ pg_ctl stop D /etc/postgresql/9.6/main m smart
3 Inicie o banco com o pg_ctl, faça o stop fast e veja os logs:
3$ pg_ctl start D /etc/postgresql/9.6/main
4$ pg_ctl stop D /etc/postgresql/9.6/main m fast
5$ pg_ctl start D /etc/postgresql/9.6/main
6$ pg_ctl stop D /etc/postgresql/9.6/main m immediate
7$ pg_ctl start D /etc/postgresql/9.6/main
54
55
Processo de Autenticação:
Os clientes do PostgreSQL fazem uma requisição do processo postmaster que
por sua vez realiza algum dos 3 tipos de autenticação que são:
pg_hba.conf:
O Postmaster ao receber a requisição só encaminhará a requisição ao
PostgreSQL criando um processo em background caso a conexão de origem estejam
de acordo com as configurações que são carregadas do pg_hba.conf, essas
informações são carregadas de 2 formas diferentes:
Parâmetros (postgresql.conf):
port = 5432
Porta do PostgreSQL
hba_file = '/etc/postgresql/9.6/main/pg_hba.conf'
Define o local do arquivo “pg_hba.conf”, esse arquivo contém as
regras para que o client possa realizar uma tentativa de conexão.
listen_addresses = 'localhost'
Parâmetro que contém os IPs que poderão “escutar” a porta do
PostgreSQL.
56
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Arquivo pg_hba.conf
57
58
local
●Conexão por Unix Domain Sockets;
●
Nem todos os clientes aceitarão conectar-se por este método;
●O psql tentará se conecta por socket local se não for especificada a opção -h;
●Se nenhuma linha do pg_hba.conf contiver este valor, a conexão por socket será
totalmente desativada.
host
●TCP/IP remoto ou local;
hostssl
●Similar à opção host, somente SSL.
disponível);
●Deve estar ativa em postgresql.conf;
hostnossl
●Exatamente o oposto de hostssl;
●
Somente conexões não criptografadas serão aceitas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Campo DATABASE
●Especificar diretamente banco de dados;
●
Separar múltiplos valores por vírgulas;
●"all" representará todos os bancos;
●
"samerole" usuários pertencentes a grupo de mesmo nome do banco.
●"@" seguido do nome do arquivo, arquivo de lista.
Campo USER
●Especificar usuário;
●
Separar múltiplos valores por vírgulas;
●Papel de grupo, precedido por "+", todos os usuários pertencentes ao grupo poderão
Campo CIDR-ADDRESS
Funciona com IPV4 e IPV6;
Depende do sistema operacional para IPV6;
Utilizar um registro IPV4 e outro IPV6 mesmo que haja equivalência.Esta é a única
coluna que pode conter de zero a dois valores separados por espaço, sendo aceitas.
Para linhas do tipo local, este campo não deve ser especificado (nenhum valor na
coluna, coluna ignorada)
Para registros host, hostssl e hostnossl, este campo pode conter:
Endereços tipo CIDR-address (um valor na coluna), por exemplo:
172.20.143.89/32 um único host
172.20.143.0/24 rede pequena
10.6.0.0/16 rede grande
201.0.0.0/8 internet, todos os IPs começando por 201
0.0.0.0/0 toda a internet
Amorim Weverton Rufino De / weverton.geek@gmail.com
Campo METHOD
Quando a tentativa de conexão coincidir com toda a combinação dos campos
anteriores, o PostgreSQL utilizará o método de conexão especificado neste campo.
Se este método aprovar a tentativa (como usuário e senha válidos), o usuário
se conectará ao banco de dados. Caso contrário, a conexão será recusada e, como já
citado acima, não haverá outras tentativas de conexão existentes no arquivo
pg_hba.conf abaixo desta linha.
trust
●Menos seguro;
reject
●
Rejeitar a conexão incondicionalmente;
●Útil para excluir hosts;
md5
●Senha criptografada;
●
Viajará criptografada pela rede;
●Preferido para conexões não SSL;
password
●Requererá uma senha não criptografada;
Ident → peer
●
Usuário do S.O é o mesmo do Postgres;
●TCP/IP, servidor ident, não recomendado;
●
Não pede senha;
●Em Solaris a partir do PostgreSQL 8.4;
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Usuários e Roles
Usuário
Usuário pode ser membro de uma role | grupo;
Deve possuir senha criptografada;
Pode definir tempo de expiração e lock;
Roles
Roles: Superuser, Create role, Create DB, Replication;
Role tem o mesmo conceito que grupo;
Uma role pode ser atribuida a qualquer usuário;
Roles são usadas para agilizar a concessão de privilégios;
62
Criação de usuários
Principais roles
SUPERUSER: Privilégios de DBA assim como o usuário “postgres”.
CREATEDB: Privilégio para criação de Databases.
CREATEROLE: Privilégios para criação e remoção de Roles / Usuários.
LOGIN: Privilégios com permissões de LOGIN no Postgres.
REPLICATION: Privilégios de replicação de dados.
Amorim Weverton Rufino De / weverton.geek@gmail.com
1=# CREATE ROLE dexter WITH PASSWORD '4linux';
2=# CREATE GROUP consulta;
4=# ALTER USER dexter WITH LOGIN;
5=# ALTER USER consulta RENAME TO desenvolvedores;
6=# ALTER USER dexter SET lock_timeout TO 100;
7=# \du
3 Valide o login com o usuário dexter:
8=# SHOW lock_timeout; \q
9$ psql Udexter h127.0.0.1 dbdexter c "SHOW lock_timeout;"
63
Criar um usuário:
CREATE USER nome_usuario [WITH rule_option] WITH PASSWORD;
Auditando usuários
64
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2 # systemctl restart postgresql
65
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito:
Comandos de
➢ GRANT – Conceder privilégios.
controle e
privilégios a dados. ➢ REVOKE – Revogar privilégios.
Syntax:
GRANT [SELECT|INSERT...] ON schema.tabela TO usuário;
REVOKE [DELETE|UPDATE...] ON schema.tabela FROM usuário;
66
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Algumas permissões
67
GRANT {{SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER}
[,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column [, ...] )
[,...] | ALL [ PRIVILEGES ] ( column [, ...] ) }
ON [ TABLE ] table_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT {{CREATE|CONNECT|TEMPORARY|TEMP} [,...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type
[, ...] ] ) [, ...]
| ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespace_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]
Amorim Weverton Rufino De / weverton.geek@gmail.com
Concedendo privilérios
Execute os comandos abaixo no dbdexter:
1 Faça os procedimentos com o usuário dexter conforme segue:
1# psql Udexter h127.0.0.1 dbdexter
2=> select * from secretaria.alunos;
68
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Recomendações Gerais
69
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Gerenciamento do PostgreSQL
Recapitulando
70
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Surgimento do SQL
Operações DDL e DML
Funções do PostgreSQL
Carga de Dados
Importação e exportação de CSV
71
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
72
Conceitos:
SQL é uma linguagem de consulta estruturada padrão dos bancos de dados
relacionais, sendo muitas de suas características inspiradas em álgebra relacional.
A IBM criou o SQL e rapidamente foi se expandindo. Em um dado momento,
houve a necessidade de uma padronização, que foi realizada pela ANSI (American
National Standards Institute) e pela ISO.
Conceito:
➢ RENAME
➢ TRUNCATE
73
Alguns sistemas de banco de dados usam o comando ALTER, que permite ao usuário
alterar um objeto, por exemplo, adicionando uma coluna a uma tabela existente.
Outros comandos DDL são:
74
Prática DDL
Execute os comandos abaixo no servidor dbmaster:
76
Criar tabela:
CREATE TABLE nome_tabela (coluna1 [TYPE], coluna2 [TYPE]);
CREATE TEMPORARY TABLE nome_tabela_temp (coluna1 [TYPE]);
Renomear tabela:
Mesmo renomeando a tabela o OID é mantido.
ALTER TABLE nome_atual RENAME TO nome_novo;
Remover tabela:
DROP TABLE nome_tabela;
Criar índice:
CREATE INDEX nome_indice ON tabela (coluna);
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito:
Comandos de consultas e manipulação de dados
do banco de dados, inserções, atualizações,
remoção de registros mantendo a estrutura de
dados inalterada.
Prática DML
Execute os comandos abaixo no dbdexter:
78
Atualizar registro(s):
UPDATE tabela SET coluna = [valor]
[WHERE campo = condição];
Remover registro(s):
DELETE FROM tabela
[WHERE campo = condição];
79
Funções no PostgreSQL:
80
3=# CREATE TABLE carga_insert (id int, valor text);
4=# CREATE TABLE carga_bloco (id int, valor text);
5=# CREATE TABLE carga_copy (id int, valor text);
6=# CREATE TABLE carga_csv (id int, valor text);
6$ time psql bi < /opt/insert_comum_10k.sql
7$ time psql bi < /opt/insert_blocos_10k.sql
8$ time psql bi < /opt/insert_copy_10k.sql
81
Amorim Weverton Rufino De / weverton.geek@gmail.com
insert_csv_10k.csv
4 Também é possível exportar para HTML:
2$ time psql d bi A H c "select * from carga_insert;" >
exemplo.html
FROM '/var/lib/postgresql/insert_csv_10k.csv' WITH
DELIMITER AS ';';"
82
Amorim Weverton Rufino De / weverton.geek@gmail.com
Recapitulando
Surgimento do SQL
Operações DDL e DML
Funções do PostgreSQL
Carga de Dados
Importação e exportação de CSV
83
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
CaracterísticasInterno
Funcionamento e Instalação do MySQL
e Parametrização
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Conhecer a arquitetura por trás de um DML;
Conceitos de Memória Compartilhada;
Aprender sobre a integridade do PostgreSQL;
Parametrização dos WAL files;
Função do Checkpoint;
Alterar parâmetros com ALTER SYSTEM;
85
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Processos do PostgreSQL
86
Processos do PostgreSQL:
Statistics collector: Coleta estatísticas sobre o uso dos objetos dos bancos de
dados; apenas um processo com este nome deve existir por cluster.
Logger: Coleta todas mensagens da saída de erro e escreve em arquivos de log;
também gerencia a rotação desses arquivos de acordo com tempo e/ou tamanho;
apenas um processo com este nome deve existir por cluster, podendo não existir
dependendo da configuração.
Archiver: Arquiva os log de transação (WAL) em um local especificado, normalmente
para fins de backup contínuo; apenas um processo com este nome deve existir por
cluster, podendo não existir dependendo da configuração.
Autovacuum launcher: Dispara execuções de processos ``autovacuum worker''
quando apropriado; apenas um processo com este nome deve existir por cluster,
podendo não existir dependendo da configuração.
Autovacuum worker: Processos que fazem as rotinas de manutenção ANALYZE e
VACUUM automaticamente. Eles se conectam ao banco de dados e tabela
determinados pelo processo ``autovacuum launcher'', e fazem esses trabalhos;
nenhum ou vários processos com este nome podem existir por cluster dependendo do
momento.
Amorim Weverton Rufino De / weverton.geek@gmail.com
88
●
A estrutura do servidor PostgreSQL é modular. Na figura são apresentados os
principais módulos e o caminho que os comandos SQL percorrem ao serem
executados. Os comandos DML - Data Manipulation Language, tais como SELECT e
UPDATE, utilizam pelo menos os módulos analisador (parser), reescritor (rewriter),
otimizador (optimizer) e executor.
●Outros comandos são tratados de maneira diferente porque não precisam dos
Parser: Faz a análise léxica e sintática de consultas SQL. A análise léxica produz uma
sequência de tokens (palavras chave) que serão utilizados durante a análise sintática
para produzir uma árvore (query tree) a partir de um conjunto de regras predefinidas.
Os tokens e sintaxe de um comando devem obedecer à especificação da linguagem
SQL;
Optimizer: Com a árvore validada pelo rewriter, tenta produzir um plano ótimo. O
optimizer traça os possíveis caminhos para execução de uma consulta e escolhe
aquele que tem o menor custo dos planos avaliados. Em consultas com muitas
junções, o planejador poderia gastar muitos recursos para determinar um plano ótimo
e utiliza um algoritmo mais rápido que não analisa todas as possibilidades, mas
oferece um plano bom
Amorim Weverton Rufino De / weverton.geek@gmail.com
Utilities: Contém rotinas de suporte tais como tipos de dados embutidos, funções
embutidas, rotinas de erro, rotinas de cache, rotinas de ordenação, gerenciador de
memória, gerenciador de funções e rotinas de suporte a codificação multibyte;
90
Este cria um fork de si mesmo para atender esta conexão, esse fork age como
um processo de backend que trata a conexão, as transações e realiza o parsing das
operações.
91
Somente após sua confirmação, o backend tenta usar o cache para gravar
essa modificação. Se o backend não conseguir gravar no cache caso ele esteja cheio,
o próprio backend gravará as informação no diretório do cluster.
Amorim Weverton Rufino De / weverton.geek@gmail.com
92
93
wal_buffers;
Shared Buffers
Shared Buffers
Os shared buffers, conforme citado anteriormente, são uma região de memória
compartilhada utilizada como buffer/cache de escrita e leitura comum a todos os
backends. Esta região tem seu tamanho limitado ao definido na opção
shared_buffers.
Ao iniciar o PostgreSQL, este segmento de memória sera totalmente alocado.
O sistema operacional deve estar configurado para aceitar a quantidade de memória
compartilhada especificada aqui.
O valor padrão típico é 128MB, mas este valor pode ser menor devido a
algumas configuração do ser sistema operacional. Esse valor também pode ser
definido em unidades de memória (kB, MB ou GB). Para bom desempenho em
produção, este valor deve ser aumentado, pois o valor padrão vem definido somente
para permitir a inicialização do banco. Este assunto será abordado em capítulo futuro.
De maneira geral recomenda-se que o tamanho dos shared buffers não
ultrapassem 40% do tamanho da memoria RAM, e também não ultrapassem a faixa
dos 4GB a 8GB. Existem limitações em ambiente Windows que tornam o uso de
grandes quantidades de shared buffer inviável. Em testes realizados, valores maiores
que 256MB causaram degradação do desempenho.
Amorim Weverton Rufino De / weverton.geek@gmail.com
grep shared_buffers
3 Reinicie o postgresql e valide conforme segue:
4=# SHOW shared_buffers;
95
Parâmetros de configuração:
ALTER SYSTEM
A versão 9.4 do PostgreSQL adicionou uma nova cláusula SQL chamada ALTER
SYSTEM. Com este comando, você pode editar diretamente as configurações do
arquivo posqtgresql.conf. Se faz necessário em alguns parâmetros a reinicialização
do Postgresql, ou reload dependendo do contexto.
Exibir um parâmetro:
SHOW parametro;
Amorim Weverton Rufino De / weverton.geek@gmail.com
Parâmetros (postgresql.conf):
bgwriter_delay = 200ms
Intervalo de execuções do BGWriter em milisegundos.
bgwriter_lru_maxpages = 200
Quantidade máxima de páginas por rodada do BGWriter.
bgwriter_lru_multiplier = 2.0
Fator de multiplicação onde (qtd paginas anterior * lru_multiplier);
96
1# vim /etc/postgresql/9.6/main/postgresql.conf
+ bgwriter_delay = 100ms
+ bgwriter_lru_maxpages = 300
+ bgwriter_lru_multiplier = 3.0
97
Utilizar shared buffers muito grandes podem denegrir o desempenho do banco, pois o
bgwriter terá de varrer uma quantidade de blocos muito grande, o que vai levar a um
tempo mais longo de execução e assim desperdiçar recursos sem necessidade.
WAL e Checkpointer
Parâmetros (postgresql.conf):
checkpoint_timeout = 5min
Limite de tempo para execução do Checkpoint;
max_wal_size = 1GB
Limite de tamanho da área de WAL para execução do Checkpoint;
min_wal_size = 80MB
Tamanho mínimo da área de WAL para execução do Checkpoint;
checkpoint_completion_target = 0.5
Fator de escala de tempo de execução de checkpoint;
checkpoint_warning = 30s
Intervalo mínimo entre checkpoints caso ultrapasse um log é gerado.
98
Dica: será exibido log caso ocorram mais de uma vez no período definido na opção:
checkpoint_warning;
LOG: checkpoints are occurring too frequently (x seconds apart)
O ideal é que os checkpoints ocorram preferencialmente por esgotamento do
tempo, pois caso ocorram por falta de segmentos com muita frequência podem
prejudicar o desempenho, devido a carga de I/O gerada na gravação dos “shared
buffers” em disco.
Uma dica será exibida no log do PostgreSQL caso os checkpoints ocorram em
períodos inferiores à opção “checkpoint_warning”
Aumentar o número de segmentos pode ajudar no desempenho do banco,
porém, deve-se tomar o cuidado de não aumentar demais, pois quando ocorrer um
crash o tempo de recuperação sera muito grande devido a necessidade de aplicar
todos estes segmentos.
Verifique seu tempo de SLA e faça testes para saber a quantidade de
segmentos aceitável no seu ambiente.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Alterando o Checkpoint
5=# SELECT pg_reload_conf();
6=# SHOW checkpoint_timeout;
99
●checkpoint_completion_target = 0.5;
Após as alterações:
●checkpoint_completion_target = 0.5;
WAL - fsync
Fsync
Garante a escrita em disco (não fica no chache do SO);
Por default é habilitado para garantir a escrita em disco;
Desabilitar ou alterar o “wal_sync_method” não é recomendado.
Parâmetros (postgresql.conf):
fsync = on
Habilita ou desabilita o fsync;
wal_sync_method = fsync
Métodos de sincronia da escrita dos arquivos de WAL;
full_page_writes = on
Cada escrita ocupa uma página inteira, desabilitar esse parâmetro
pode comprometer a integridade dos dados na recuperação.
100