Figura 1: Logo do PostgreSQL

Um pouco de  fundamentos da arquitetura do PostgreSQL

Para entendermos um pouco da arquitetura do PostgreSQL é necessário  compreender como as partes do PostgreSQL interagem.

Existem dois processos (daemon) que atuam diretamente da execução do servidor.

  • Postmaster:  processo servidor responsável diretamente pela gerência de banco de dados, aceita conexões, e é conhecido como processo servidor.
  • Postgres:  processo cliente responsável por atender a requisição de um cliente.

Caso o cliente não esteja  no servidor, o mesmo se comunica com o servidor através de uma conexão de rede TCP/IP.

O servidor PostgreSQL pode tratar várias conexões  simultâneas de clientes. Para esta finalidade é iniciado um novo processo para cada conexão.

Composição do processo cliente postgres

  • Parser: responsável por checar a sintaxe da query está correta.
  • Traffic Cop: determina se é uma query complexa(Insert, Select) ou um utilitário (Create table).
  • Utility Command: responsável por devolver o resultado ao processo cliente.
  • Query rewriter: responsável por reescrever a query levando em consideração as regras(rules). 
  • Planner: responsável por elaborar um plano de execução  levando em conta as estimativas de custo.
  • Executor: responsável por executar o plano selecionado e devolve os registros para o processo cliente.

Aplicativos Clientes

Aplicações que podem ser utilizados a partir de qualquer lugar com usuário pelo menos com privilégios de execução.

  • clusterdb - um cluster de banco de dados PostgreSQL
  • createdb  - cria um banco de dados PostgreSQL
  • createlang - define uma linguagem procedural do PostgreSQL
  • Createuser - define uma nova conta de usuário do PostgreSQL
  • Dropdb - remove um banco de dados PostgreSQL
  • Droplang - remove uma linguagem procedural do PostgreSQL
  • Dropuser - remove uma conta de usuário do PostgreSQL
  • Ecpg - pré-processador SQL embutido C
  • pg_config - recuperar informações sobre a versão instalada do PostgreSQL
  • pg_dump - extrai um banco de dados PostgreSQL para um arquivo script ou arquivo de outro arquivo
  • pg_dumpall - extrato de um cluster de banco de dados PostgreSQL para um arquivo script
  • pg_restore - restaura um banco de dados PostgreSQL a partir de um arquivo criado pelo pg_dump.
  • Psql - terminal interativo do PostgreSQL
  • Reindexdb - reindexar um banco de dados PostgreSQL
  • Vacuumdb - limpa e analisa um banco de dados PostgreSQL

Aplicativos Servidor

Estes comandos só podem ser úteis quando executados no host onde o servidor de banco de dados reside.

  • initdb - cria um cluster de banco de dados do PostgreSQL
  • ipcclean - remove a memória compartilhada
  • pg_controldata - informação de controle de exibição de um cluster de banco de dados PostgreSQL
  • pg_ctl - start, stop, or restart um servidor PostgreSQL.
  • pg_resetxlog - redefini o log write-ahead e outras informações de controle de um cluster de banco de dados PostgreSQL

Organização dos Arquivos de Bancos de Dados

Os dados necessários para um agrupamento de banco de Dados são armazenados dentro do diretório de Dados, geralmente é configurado através de  uma váriavel de ambiente denominada PGDATA. No linux, o caminho  padrão é /var/lib/pgsql/data.

Estrutura de Arquivos

  • PG_VERSION: arquivo contendo o número da versão do PostgreSQL.
  • base: subdiretório contendo subdiretórios por banco de dados.
  • Global: subdiretório contendo tabelas para todo o agrupamento, como pg_database.
  • pg_clog: subdiretório contendo dados sobre status de efetivação de transação.
  • pg_subtrans: subdiretório contendo dados sobre status de subtransação.
  • pg_tblspc: subdiretório contendo vínculos simbólicos para espaços d tabelas.
  • pg_xlog: subdiretório contendo os arquivos do wal(registro prévio da escrita)
  • postmaster.opts: arquivo contendo as opções de linha de comando com as quais o postmaster foi inicializado da última vez.
  • postmaster.pid: arquivo de bloqueio contendo o PID(Process Identifier, identificador de processo = número único gerado automaticamente para controle interno dos processos) corrente do postmaster, e o ID do segmento de memória compartilhada(não mais presente após o processo postmasterter sido parado)

Conteúdo do PGDATA

Quando uma tabela ou um índice excede 1Gb,  este é dividido em segmentos de até 1 GB. O nome do primeiro arquivo de segmento é o mesmo do filenode, os arquivos subseqüentes  são chamados de filenode.1, filenode.2, etc. Esta organização evita problemas em plataformas que possuem limitação de tamanho de arquivo.

O filenode da tabela geralmente corresponde ao seu OID(Object identifier, identificador de objeto=Número único gerado automaticamente para controle interno dos objetos.

WAL = Write Ahead Logging

Abordagem padrão para registrar transações, o conceito central aborda que as alterações nos arquivos de dados só poderão ser efetivadas quando a mesma poderá ser escrita em disco. Benefícios: tedução significativa no número de escritas em Disco.

Chega de teoria, vamos para prática.

Instalação do Servidor  PostgreSQL no Linux

A mais exercida no mundo Linux, através do repositório linux.

Listagem 1: Instalando do servidor PostgreSQL no Linux

apt-get install postgresql

A instalação é concluída em poucos segundos, após o download do pacote.

Instalação via pacote binário

Justificativa para devida instalação: desta forma iremos compilar o pacote do postgres e o mesmo será ajustável conforme o kernel do seu sistema operacional. Com isso podemos ganhar performance no servidor de Banco de dados.

Passos:

1 - www.postgresql.org/ftp/source/v8.2.22/

2 - Download da versão binary qualquer formato compactado. Usaremos aqui (tar.gz).

3 - Escolher um mirror.

4 - Descompactar o arquivo baixado.

5 - Entrar na pasta que foi gerada após a descompactação.

6 - Instalar os pacotes listados abaixo.

Listagem 2: Instalação dos pacotes binários


apt-get install g++
apt-get install libreadline-dev
apt-get install zlib1g-dev

7 - ./configure --prefix=/etc/postgresql/ --with-pgport=5432     #pré configurado o pacote postgresql

8 - make #compilando o pacote postgresql

9- make install #instalando o pacote postgresql

10 - Adicionar um usuário postgres através do comando adduser postgres.

Obs.: O usuário postgres fora criado basicamente para gerenciar os serviços do bd, exemplo: inicializar e reinicializar o servidor de banco de dados.

11 - Criar um diretório para os arquivos de dados. Sugestao mkdir /etc/postgresql/data/

12 - Atribuir privilégios para usuário postgres na pasta /etc/postgresql/bin/ através do comando chown postgres /etc/postgresql/bin -R -f

13 - Atribuir privilégios para usuário postgres na pasta /etc/postgresql/data/ através do comando chown postgres /etc/postgresql/data -R –f

14 – Entrar na pasta com o comando cd /etc/postgresql/bin/

15 – Digitar su postgres e caso solicitada  digitar a senha cadastrada

16 - ./initdb –D /etc/postgresql/data /

17 - Para inicializar o servidor basta seguir as instruções da listagem abaixo.

18- Utilizando a ferramenta apt-get install vamos agora instalar a ferramenta pgadmin3. Com o comando apt-get install pgadmin3.

Obs.:Os passos 12 e 13 estamos definindo que o usuário postgres será o responsável por inicializar o servidor de banco de dados, bem como o dono do diretório /etc/postgresql/data por isso estejam atentos antes de executar os comandos localizados dentro do diretório /etc/postgresql/bin/.

Vale ressaltar que para inicializar o servidor de banco de dados. Você deverá entrar com usuário postgres.

Listagem 3: Comandos para inicializar o servidor

./postgres -D /etc/postgresql/data
ou 
./pg_ctl -D /etc/postgresql/data -l logfile start

Listagem 4: Resultado do commando de inicialização do servidor

 
LOG:  database system was shut down at 2011-12-01 16:11:47 AMT 

LOG:  checkpoint record is at 0/42D5CC 

LOG:  redo record is at 0/42D5CC; undo record is at 0/0; shutdown TRUE 

LOG:  next transaction ID: 0/880; next OID: 16385 

LOG:  next MultiXactId: 1; next MultiXactOffset: 0 

LOG:  database system is ready 

Obs.: O sistema informa que o servidor de banco de dados já encontra-se pronto para “trabalhar”.

Para deixar o servidor rodando e você continuar utilizando o terminal, aperte a tecla Ctrl e a tecla Z do teclado e digite bg para rodar o processo em background e o terminal ficar disponível.

Os arquivos de configuração do PostgreSQL estarão disponível na seguinte pasta: /etc/postgresql/data/.

Voltemos para Composição do PGDATA. Atenção para esses arquivos.

pg_hba.conf: arquivo responsável por armazenar os usuários que possuem acesso ao servidor PostgreSQL. Este arquivo deverá ser configurado para fornecer o primeiro acesso ao Servidor de banco de dados PostgreSQL. No final do arquivo, localizar as informações abaixo e substituir md5 por trust, conforme exemplo abaixo.

Listagem 5: Conteúdo substituídoi do arquivo ph_hba.conf


# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD 

# IPv4 local connections: 

host    all         all         127.0.0.1/32          trust 

# IPv6 local connections: 

host    all         all         ::1/128               trust 

postgresql.conf: arquivo carregado  durante a inicialização do servidor PostgreSQL,  neste arquivo encontram-se registradas informações do tipo qual porta que o servidor irá trabalhar, qual o endereço IP que ele atenderá a requisições.

Acessando o Pgadmin3 e Testando o servidor recém instalado

Abra pgadmin3 e preencha as seguintes informações.

  • Name: preencha com o nome do servidor de banco de dados (PostgreSQL Database Server 8.2 - este nome pode ser definido por você).
  • host: localhost
  • Port:5432
  • username: postgres
  • password: em branco(vazia)

O servidor de banco de dados já encontra-se instalado e pronto para ser utilizado, as alterações abaixo são para necessidades específicas.

Complementos

Listagem 6: Alterações no postgresql.conf para disponibilizar o servidor para um ip específico


Listen_adresses='localhost, 192.168.0.10' #ip_do_servidor onde fora instalado o postgres 

Port =5432(default) 

Max_connections=100 

Listagem 7: Alterações no pg_hba.conf para disponibilizar o servidor para uma rede específica – rede 25


#Significa que toda a rede 172.22.25.xx  poderá acessar o servidor PostgreSQL. 

local    DB    user    cidr-address        method 

Host     all     all     172.22.25.0/24     md5 #suporta senhas criptografadas 

O arquivo já vem configurado com uma breve descrição(manual)  para possíveis alterações. Adicionar no final do arquivo as linhas acima.

Ainda podemos especificar qual base de dados e qual usuário poderá acessar o servidor através da sintaxe abaixo.

Listagem 8: Alterações no pg_hba.conf para disponibilizar um banco para um ip específico


local    DB        user        cidr-address        method 

Host     pgdayrr        participantes     172.22.25.103/32        md5 

Significa que o ip 172.22.25.103 só  poderá ter acesso apenas ao banco de dados pgdayrr com o usuário “participantes”.

Não é aconselhável deixar que  qualquer usuário acesse o servidor de banco de dados, já que o mesmo poderia ser um alvo de hacker na internet, por exemplo. E a opção trust no arquivo pg_hba.conf não deverá ficar configurada como trust, o correto é deixar como md5, pois com trust significa que o usuário não precisará de senha para acessar o servidor basta o usuário.

PostgreSQL live

São imagens de CD que permitem você rodar e utilizar o PostgreSQL e uma seleção de softwares e ferramentas correlatas sem instalar nada no seu PC. Extremamente útil para disponibilização de servidores PostgreSQL em poucos minutos.

Turnkey Linux e PostgreSQL - http://www.turnkeylinux.org/

Um live CD baseado no Ubuntu e um software pré-configurado caracterizado por uma interface Web com tema Mac OS e um console de instalação em Python.

Após o download do arquivo basta gravar a imagem em um cd, carregar o computador através do boot do cd, selecionar a segunda opção, que descreve “tentar executar o cd live sem modificações nenhuma no sistema atual”.

Após o carregamento do sistema o mesmo solicitará a senha para o administrador do sistema Linux e outra senha para usuário postgres. Após o sistema carregar, definir um endereço ip para tal servidor e pronto, o mesmo está acessível através do ip que você definiu.

Benefícios TURNKEY:

  • Software Livre de código aberto.
  • Projetado para facilidade de uso, construído e pré-testado por uma comunidade de especialistas.
  • Backup e migração: software inteligente salva as alterações em arquivos, bancos de dados e gerenciamento de pacotes para armazenamento criptografado quais servidores podem ser automaticamente restaurado.
  • Leve (a partir de 150MB): cada appliance virtual é cuidadosamente construída de baixo para cima com os componentes mínimos necessários para servir o seu papel com a máxima eficiência e segurança.
  • Ferramentas como firewall, phppgadmin e muitas outras pré instaladas, sem a necessidade de conhecimento técnico abrangente.

Mais informações

Conclusão

O PostgreSQL é uma poderosa ferramenta de banco de dados sendo utilizada em grandes aplicações principalmente pela sua robustez. A configuração que rege o sistema PostgreSQL é um  dos passos mais importantes para sua devida disponibilização.