7 de janeiro de 2012

Configurações adicionais para PostgreSQL 9.1

Em sequência ao post anterior sobre o PostgreSQL, "Instalação PostgreSQL 9.1 32 bits em distro Debian ou Ubuntu", algumas configuraçoes adicionais para funcionamento deste Sistema Gerenciador de Banco de Dados (SGDB) serão mostradas a seguir. O objetivo é preparar o PostgreSQL para receber acesso pela rede, assim como a criação do script de inicialização.
O PostgreSQL oferece uma infinidade de recursos que podem ser aplicados de acordo com a sua necessidade, porém, apenas as principais configurações serão abordadas aqui. Serão utilizados os arquivos "postgresql.conf" e "pg_hba.conf", contidos na pasta do cluster, que em nosso exemplo, no post anterior, foi criado na pasta "/opt/postgresql-9.1.0/pgdata".

Arquivo postgresql.conf
As configurações a seguir serão realizadas no arquivo "postgresql.conf", Edite o referido arquivo e inicie as configurações.
Retire o comentário da configuração da porta.
 - alterar de: #port = 5432
 - para: port = 5432
Para servidor em produção, é recomendado a alteração do número da porta.


Configure a inicialização do serviço do "postgres" pelo ip do seu servidor, permitindo acessos pela rede.
Retire o comentário e altere o parâmetro “listen_address=”.
 - alterar de: #listen_addresses = 'localhost'
 - para: listen_addresses = 'ip_servidor_bd'
É muito comum a utilização de "*" para configuração deste parâmetro, onde o serviço fica em "up" utilizando o ip "0.0.0.0". Este ip, deixa a conexão conforme o endereço de rede corrente. Esta configuração não é recomendada para utilização do SGDB em produção. Utilize o ip do seu servidor de banco de dados.


Configure os logs, descomentando e/ou alterando os parâmetros conforme seguem. A habilitação destes parâmetros não são obrigatórios, e podem ser alterados de acordo com suas necessidades.

Habilite a coleta de logs:

 - alterar de: #logging_collector = off
 - para: logging_collector = on


Habilite a pasta "pg_log" para gravação dos logs. Esta pasta fica no respectivo cluster, referente ao arquivo de configuração "postgresql". Em nosso exemplo, ficará em "/opt/postgresql-9.1.0/pgdata/pg_log":
 - alterar de: #log_directory = 'pg_log'
 - para: log_directory = 'pg_log'

Habilite o "timestamp", para melhor organização e visualização dos arquivos de log:
 - alterar de: #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
 - para: log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

Habilite o tempo de rotação para 1(um) dia.
 - alterar de: #log_rotation_age = 1d
 - para: log_rotation_age = 1d

Arquivo pg_hba.conf
Edite o arquivo “pg_hba.conf” para atribuir permissões de acesso de usuário e/ou hosts ao cluster do SGDB. Localize a linha referente ao IPV4, conforme abaixo, e inclua o usuário, base de dados e/ou host que terá acesso ao SGDB, seguindo ordem da coluna.

Veja abaixo o arquivo antes da configuração:
   # TYPE  DATABASE        USER            ADDRESS                 METHOD
   # IPv4 local connections:
   host       all                      all                 127.0.0.1/32              trust


Exemplo para permissão de acesso para usuário postgres em todas as base de dados a partir do ip 192.168.1.20, utilizando método de autenticação "md5".
Veja abaixo as linhas após a configuração:
   # TYPE  DATABASE        USER            ADDRESS                 METHOD
   # IPv4 local connections:
   host    all                         all              127.0.0.1/32              trust
   host    all                         postgres    192.168.1.0/24           md5


O arquivo de configuração "pg_hba.conf" oferece bastante flexibilidade em sua configuração, e dependendo de como é feito, pode deixar "brechas" de segurança em seu SGDB, ou seja, permitindo acessos não autorizados aos bancos de dados. Como não é o foco deste post falar sobre o "pg_hba.conf", a principal dica é observar as colunas nos qual as informações são inseridas para permissões de acessos. Fazendo uma leitura do nosso exemplo, citado acima, foi atribuido permissão de acesso a todos os bancos de dados, para o usuário "postgres", no range de ip "192.168.1.0", utilizando autenticação md5.

Configurar script de inicialização
O PostgreSQL já vem com um script pré configurado para facilitar a inicialização do SGDB. Copie e configure o arquivo conforme abaixo.

~$ cp /opt/download/postgresql-9.1.0/contrib/start-scripts/linux /etc/init.d/postgresql-9.1.0
~$ sudo chmod +x /etc/init.d/postgresql-9.1.0


Configure o arquivo, editando-o e alterando os parâmetros abaixo.
Altere o parâmetro "prefix" de acordo com o caminho da instalação, que em nosso exemplo ficará.
 - alterar de: prefix=/usr/local/pgsql
 - para: prefix=/opt/postgresql-9.1.0

Altere o parâmetro "PGDATA", que indica a localização do cluster.
 - alterar de: "/usr/local/pgsql/data"
 - para: "/opt/postgresql-9.1.0/pgdata"


Digite o comando abaixo para que o SGDB inicialize automaticamente durante o boot do seu servidor, quando necessário.
~$ sudo update-rc.d postgresql-9.1.0-nome_projeto01 defaults 99


Após as configurações, o cluster pode ser inicializado ou parado conforme abaixo a sintaxe abaixo.
Usar: /etc/init.d/postgresql-9.1.0 {start|stop|restart|reload|status}



Para concluir, quando trabalhamos com banco em produção, é importante saber qual o momento de realizar a reinicialização ou o reload no SGDB, após configurações. No caso do PostgreSQL, essas configurações são realizadas no arquivo "postgresql.conf", como já sabemos. Para obter esta informação, acesse o PostgreSQL e execute o comando "SQL" citado abaixo, para verificar a característica do parâmetro. Foi utilizado como exemplo parâmetro "port", que alteramos acima.
~$ su - postgres
~$ psql -p 5432
postgres=# select name, setting, context from pg_settings where name~ 'port';
 name | setting |  context  
------+---------+------------
 port | 5432    | postmaster
(1 row)

Quando o registro do campo "context" for igual a "postmaster", realizar a reinicialização do serviço e quando for "sighup", apenas o reload é suficiente para que a configuração seja efetivada no ambiente.

Com relação ao arquivo de configuração "pg_hba.conf", sempre que alterado, apenas o reload é necessário para efetivação de configurações.

Com estas informações, o planejamento de mudanças e precauções contra impactos no ambiente podem ser realizados com segurança. Outros parâmetros configuráveis, contidos no arquivo "postgresql.conf" constam na tabela "pg_settings", podem ser consultados.

Veja também:

No mais, é Sob Demanda!

Um comentário:

  1. muito obrigado essa informação me salvou depois de muito procurar na internet

    ResponderExcluir