#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

3 comentários sobre “Como solucionar o erro de domain socket no PostgreSQL

  1. diego henrique disse:

    Cara, muito bom o seu post. Me explica uma coisa, como você faz para inserir estás fontes dentro dos blocos? Abraço!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s