Escolha uma Página

Introdução

Este fim de semana eu @battisti e o @asfelix tivemos um problema durante o processo de instalação do php com o postgres, depois de fazer todas as configurações o banco continuava a dar a seguinte mensagem de erro:

Permission denied Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?

Arquivos de Configuração

O postgres possui basicamente 2 arquivos de configurações responsáveis pela conexão, eles são:

  1. postgresql.conf aqui você precisa definir que o seu banco de dados irá receber conexão através de TCP/IP, até a versão 7.9 do postgres esta configuração era feita assim:
    tcpip_socket = true

    A partir da versão 8 isso é feito assim: listen_addresses = ‘*’ port = 5432

  2. pg_hba.conf este é o arquivo que define quem pode acessar o que e de qual forma: para permitir que qualquer IP possa acessar qualquer banco adicione esta linha no arquivo host    all          all         0.0.0.0 0.0.0.0       password Se quiser que apenas 1 IP específico possa acessar a máquina então host    all          all         200.200.200.200/32      password A palavra password define que para você acessar o banco tem que digitar a senha, existe a palavra trust que diz ao banco para nao pedir senha então tenha cuidado com este tipo de configuração

Após mexer nestes dois arquivos reinicie o banco. Para acessar o seu banco através do terminal use o comando: psql -h 200.200.200.200 -U postgres -d banco Fique atento aos firewall pois eles podem barrar a sua conexão com o banco, e mais uma dica para que a conexão possa ser estabelecida no CentOS é necessário desativar o SELinux, que por padrão na instalação fica ativado: vim /etc/sysconfig/selinux e configure  o SELINUX=disabled

Exemplo de Conexão PHP para Teste

try {
	$db = new PDO("pgsql:host=localhost dbname=datacentro user=postgres password=data1234");
 
	$sql = 'SELECT * FROM pessoa';
	foreach ($db->query($sql) as $row) {
		print $row['cod'] . "\t";
		print $row['nome'] . "\t";
	}
 
} catch (PDOException  $e) {
   print $e->getMessage();
}
die("fim");

Referência

http://www.cyberciti.biz/faq/postgresql-remote-access-or-connection/

Apache PHP Postgresql no CentOS e Fedora