#bancoDeDados, #configuração

Como solucionar o erro de domain socket no PostgreSQL


Olá pessoal.

Novamente ao instalar o PostgreSQL eu me esbarrei com o erro:

Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Este é um erro conhecido e frequente, já tive ao instalar o PostgreSQL no Mac OS e agora tive ao instalar no Ubuntu em uma instância na Amazon AWS. O erro acontece ao tentar conectar no banco de dados, via psql ou pelo comandos do PostgreSQL (ex.: createuser).

Após várias pesquisas e testes cheguei à solução que compartilho aqui.

Por algum motivo que desconheço o PostgreSQL não define nenhum valor para a variável unix_socket_directory, mas de alguma forma a criação da conexão fica procurando pela pasta /var/run/postgresql.

A primeira coisa a ser feita é definir um local para unix_socket_directory, e este local não pode ser dentro da pasta /var/run/postgresql porque até onde vi o conteúdo desta pasta não é persistente e o erro volta a acontecer após um reboot.

Então no arquivo /usr/local/pgsql/data/postgresql.conf defina um valor para a variável unix_socket_directory:

unix_socket_directory = '/tmp/postgresql'

Agora é preciso criar a pasta que será utilizada pelo socket:

sudo mkdir /tmp/postgresql

E definir as permissões para o usuário postgres e para o grupo de usuários denominado ubuntu:

sudo chown -R postgres /tmp/postgresql
sudo chgrp -R ubuntu /tmp/postgresql

Também é preciso criar o diretório de dados:

sudo mkdir -p /usr/local/pgsql/data

E definir as permissões:

sudo chown -R postgres:postgres /usr/local/pgsql/

Feito isso iremos alterar o acesso para o usuário postgres:

sudo su - postgres

Acesse o diretório dos executáveis:

cd /usr/lib/postgresql/9.1/bin/

Inicialize a área de dados:

./initdb -D /usr/local/pgsql/data

Inicie o servidor PostgresSQL:

./postgres -D /usr/local/pgsql/data

Eu também alterei o conteúdo do script de inicialização do PostgreSQL para passar as novas configurações. E o meu arquivo /etc/init.d/postgresql ficou assim:

#!/bin/sh -e
PGVER='9.1'
BINPATH="/usr/lib/postgresql/$PGVER/bin/"
PGUSER='postgres'
PGLOG='/tmp/postgresql/pgsql.log'
PGDIR='/usr/local/pgsql/data'

start(){
   cd $BINPATH
   su $PGUSER -c "./pg_ctl -D $PGDIR -l $PGLOG start"
}

stop(){
   cd $BINPATH
   su $PGUSER -c "./pg_ctl -D $PGDIR -l $PGLOG stop"
}

case "$1" in
   start)
      start
      ;;
   stop)
      stop
      ;;
   restart)
      stop
      start
      ;;
   *)
      echo "Usage: $0 {start|stop|restart}"
      exit 1
      ;;
esac

exit 0

Agora é possível iniciar, parar e reiniciar o PostgreSQL com os comandos:

sudo /etc/init.d/postgresql start
sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql restart

E acessar a interface do PostgreSQL com o comando:

sudo su - postgres
psql

That’s all folks!!!

Até breve 😉

Referências:

http://goo.gl/HQC3j

http://goo.gl/UZRGT

http://goo.gl/j4eTP

Anúncios
Padrão