Não é possível conectar ao postgresql na porta 5432


82

Eu instalei a pilha Bitnami Django que incluía o PostgreSQL 8.4.

Quando executo psql -U postgres, recebo o seguinte erro:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

O PG está definitivamente em execução e o pg_hba.confarquivo fica assim:

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

O que da?

"Prova" de que a página está sendo executada:

root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
root@assaf-desktop:/home/assaf# 

Não faço ideia do que você está perguntando e nunca forneceu informações. São 100 pessoas recebendo um erro genérico e relatando coisas diferentes. Está totalmente fora de formato para o site.
Evan Carroll

Respostas:


87

Esse problema ocorre com a instalação do postgrespacote sem um número de versão. Embora postgresesteja instalado e seja a versão correta, o script para configurar o cluster não será executado corretamente; é uma questão de embalagem.

Se você se sentir confortável com postgresum script, poderá executar para criar este cluster e continuar postgresexecutando. No entanto, há uma maneira mais fácil.

Primeiro limpe a instalação antiga do postgres. Atualmente, o problema está na versão 9.1, portanto, assumirei que é isso que você instalou

sudo apt-get remove --purge postgresql-9.1

Agora basta reinstalar

sudo apt-get install postgresql-9.1

Anote o nome do pacote com o número da versão. HTH.


3
isso me ajudou com o postgres 9.3.
30714 sevenseacat

1
Esta deve ser a resposta aceita, trabalha com PostgreSQL 9.4 / ubuntu 14,10, também
Malte

1
esta resposta me ajudou com a mistura do postgres 9.4 e 9.3. Legal.
ingo

2
Funcionou no ubuntu 16.04 e no postgres 9.5, mas teve que limpar primeiro todos os pacotes relacionados ao postgres.
Evert

2
Esta é realmente uma resposta incrível! E também uma experiência horrível para o usuário do lado do postgres
#

23

A mensagem de erro refere-se a um soquete de domínio Unix, portanto, você precisa ajustar sua netstatchamada para não excluí-los. Portanto, tente sem a opção -t:

netstat -nlp | grep 5432

Eu acho que o servidor está realmente ouvindo no soquete /tmp/.s.PGSQL.5432e não no /var/run/postgresql/.s.PGSQL.5432que seu cliente está tentando se conectar. Este é um problema típico ao usar pacotes PostgreSQL compilados ou de terceiros no Debian ou Ubuntu, porque o padrão de origem para o diretório de soquete do domínio Unix é /tmpmas o pacote Debian o altera para /var/run/postgresql.

Soluções possíveis:

  • Use os clientes fornecidos pelo seu pacote de terceiros (chamada /opt/djangostack-1.3-0/postgresql/bin/psql). Possivelmente desinstalar completamente os pacotes fornecidos pelo Ubuntu (pode ser difícil por causa de outras dependências reversas).
  • Corrija o diretório do soquete do pacote de terceiros para ser compatível com o Debian / Ubuntu.
  • Use -H localhostpara conectar via TCP / IP.
  • Use -h /tmpou PGHOSTconfiguração equivalente para apontar para o diretório certo.
  • Não use pacotes de terceiros.

19

Isso funciona para mim:

Edit: postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

Ative ou adicione:

listen_addresses = '*'

Reinicie o mecanismo do banco de dados:

sudo service postgresql restart

Além disso, você pode verificar o arquivo pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

E adicione seu endereço de rede ou host:

host    all             all             192.168.1.0/24          md5

o listen_address = '*' fez o truque. estava apenas ouvindo no "localhost" e não no 127.0.0.1. obrigado!
mwm

meu deus ... finalmente algo que funcionou - nada funcionou até eu adicionar o endereço e o endereço de escuta descomentado.
AntonB

Mais um! Funcionou para mim.
Atul Makwana 06/10

1
isso funciona no ubuntu windows bash.
precisa saber é o seguinte

Posso confirmar que ele funciona no comando do Ubuntu Server bash no Windows 10.
Ronald

18

Você pode usar psql -U postgres -h localhostpara forçar a conexão por TCP em vez de soquetes de domínio UNIX; sua netstatsaída mostra que o servidor PostgreSQL está escutando na porta 5432 do host local.

Você pode descobrir qual soquete UNIX local é usado pelo servidor PostgrSQL usando uma invocação diferente do netstat :

netstat -lp --protocol=unix | grep postgres

De qualquer forma, as interfaces nas quais o servidor PostgreSQL escuta são configuradas postgresql.conf.


17

Basta criar um softlink como este:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

1
Isso funcionou para mim e parecia ser a solução mais fácil sem precisar alterar sua configuração do postgresql. Certifique-se de ser superusuário ao tentar criar um link.
Brendan

2
ln: falha ao criar o link simbólico '/var/run/postgresql/.s.PGSQL.5432': O arquivo existe
P_M

Eu criei a pasta "postgresql" no diretório / var / run /. Não existia.
Ikrom

Funciona incrível, qual é a razão por trás disso?
Teoman shipahi 11/04

7

Eu faço funcionar fazendo o seguinte:

dpkg-reconfigure locales

Escolha seus locais preferidos e execute

pg_createcluster 9.5 main --start

(9.5 é a minha versão do postgresql)

/etc/init.d/postgresql start

e então funciona!

sudo su - postgres
psql

Hah, desculpe, acho que os comandos deixaram claro. para mim, encontro esse problema ao reinstalar o postgresql, tento reiniciá-lo por tipo, service postgresql restart mas ele diz que não tinha nenhum cluster do postgresql. Então eu encontrar o dessa maneira para me ajudar :)
mymusise

Bem, depois de três horas pesquisando no Google, você finalmente resolveu meu problema. dpkg-reconfigure localesé muito importante.
Don Mums

5

Eu tive que compilar o PostgreSQL 8.1 no Debian Squeeze porque estou usando o Project Open, que é baseado no OpenACS e não será executado nas versões mais recentes do PostgreSQL.

A configuração de compilação padrão coloca o unix_socketin /tmp, mas o Project Open, que depende do PostgreSQL, não funcionaria porque procura pelo unix_socketat /var/run/postgresql.

Há uma configuração postgresql.confpara definir a localização do soquete. Meu problema era que eu poderia definir /tmpe psqltrabalhar, mas não o projeto aberto, ou poderia defini-lo /var/run/postgresqle psqlnão funcionaria, mas o projeto aberto funcionou.

Uma solução para o problema é definir o soquete /var/run/postgresqle depois executar psql, com base na sugestão de Peter, como:

psql -h /var/run/postgresql

Isso é executado localmente usando permissões locais. A única desvantagem é que ele é mais digitado do que simplesmente "psql".

A outra sugestão que alguém fez foi criar um vínculo simbólico entre os dois locais. Isso também funcionou, mas o link desapareceu após a reinicialização. Talvez seja mais fácil usar apenas o argumento -h, no entanto, criei o link simbólico a partir do script PostgreSQL em /etc/init.d. Coloquei o comando de criação de link simbólico na seção "Iniciar". Obviamente, quando eu emitir um comando de parada e iniciar ou reiniciar, ele tentará recriar um link simbólico existente, mas, além da mensagem de aviso, provavelmente não haverá nenhum problema nisso.

No meu caso, em vez de:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

eu tenho

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

e definiu explicitamente o unix_socket como /var/run/postgresql/.s.PGSQL.5432in postgresql.conf.


3

Solução:

Fazem isto

export LC_ALL="en_US.UTF-8"

e isto. ( 9.3 é minha versão atual do PostgreSQL. Escreva sua versão!)

sudo pg_createcluster 9.3 main --start

uau, foi a única solução para o meu problema, obrigado.
user3687723

3

Se o seu serviço Postgres estiver funcionando sem nenhum erro ou não houver erro ao iniciar o serviço Postgres e você ainda estiver recebendo o erro mencionado, siga estas etapas

Etapa 1: A execução pg_lsclusterslistará todos os clusters do postgres em execução no seu dispositivo

por exemplo:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

provavelmente o status estará baixo no seu caso e no serviço postgres

Etapa 2: reinicie o pg_ctlcluster

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

#restart postgres
sudo service postgres restart

Etapa 3: a etapa 2 falhou e gerou um erro

Se este processo não for bem sucedido, ocorrerá um erro. Você pode ver o log de erro/var/log/postgresql/postgresql-9.6-main.log

Meu erro foi:

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

Etapa 4: verificar a propriedade do postgres

Certifique-se de que postgresé o proprietário de/var/lib/postgresql/version_no/main

Caso contrário, execute

sudo chown postgres -R /var/lib/postgresql/9.6/main/

Etapa 5: verificar se o usuário do postgres pertence ao grupo de usuários ssl-cert

Acontece que eu removi erroneamente o usuário do Postgres do ssl-certgrupo. Execute o código abaixo para corrigir o problema do grupo de usuários e as permissões

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fix ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgres restart

2

No meu caso, foi causado por um erro de digitação que fiz durante a edição /etc/postgresql/9.5/main/pg_hba.conf

Eu mudei:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

para:

# Database administrative login by Unix domain socket
local   all             postgres                                MD5

Mas MD5tinha que ser minúsculo md5:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

1
Esta é a resposta que fixa-lo para mim :) Eu já tinha mudado meu para trusted, em vez de trust, e não reiniciar o serviço, e só quebrou o dia seguinte, quando eu já esqueci o que mudou
Phlippie Bosman

2

Achei que a desinstalação do Postgres parece pouco convincente. Isso ajuda a resolver meu problema:

  1. Inicie o servidor postgres:

    sudo systemctl start postgresql
    
  2. Verifique se o servidor inicia na inicialização:

    sudo systemctl enable postgresql
    

Informações detalhadas podem ser encontradas no site DigitalOcean Aqui.


2

Falha ao resolver este problema com o meu servidor postgres-9.5. Após 3 dias de progresso zero, tentando todas as permutações de correção neste e em outros sites, decidi reinstalar o servidor e perder 5 dias de trabalho. Mas repliquei o problema na nova instância. Isso pode fornecer uma perspectiva de como corrigi-lo antes de você adotar a abordagem catastrófica que eu fiz.

Primeiro, desative todas as configurações de log no postgresql.conf. Esta é a seção:

# ERROR REPORTING AND LOGGING

Comente tudo nessa seção. Em seguida, reinicie o serviço.

Ao reiniciar, use /etc/init.d/postgresql start ou restart achei útil estar no modo superusuário durante a reinicialização. Eu tinha uma janela x aberta apenas para essa operação. Você pode estabelecer esse modo de superusuário com sudo -i.

Verifique se o servidor pode ser alcançado com este comando simples: psql -l -U postgres

Se isso não resolver, considere o seguinte:

Eu estava mudando a propriedade em várias pastas enquanto tentava encontrar uma solução. Eu sabia que provavelmente tentaria reverter essas propriedades de pasta chmodpor mais dois dias. Se você já mexeu com essas propriedades de pasta e não deseja limpar completamente o servidor, comece a rastrear as configurações de todas as pastas afetadas para trazê-las de volta ao estado original. Você pode tentar fazer uma instalação paralela em outro sistema e verificar sistematicamente a propriedade e as configurações de todas as pastas. Tedioso, mas você pode obter acesso aos seus dados.

Depois de obter acesso, altere sistematicamente cada linha relevante na # ERROR REPORTING AND LOGGINGseção do postgresql.confarquivo. Reinicie e teste. Descobri que a pasta padrão dos logs estava causando uma falha. Eu comentei especificamente log_directory. A pasta padrão em que o sistema coloca os logs é então /var/log/postgresql.


1

Possivelmente isso pode ter acontecido porque você alterou as permissões da /var/lib/postgresql/9.3/mainpasta.

Tente alterá-lo para 700 usando o comando abaixo:

sudo chmod 700 main

1

Isso não está exatamente relacionado à pergunta desde que eu estou usando o Flask, mas esse foi o erro exato que eu estava recebendo e esse foi o segmento mais relevante para obter idéias.

Minha configuração: Windows Subsystem para Linux, Composição do Docker com makefile com arquivo docker, Flask, Postgresql (usando um esquema que consiste em tabelas)

Para conectar-se ao postgres, configure sua string de conexão da seguinte maneira:

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://<user>:<password>@<container_name_in_docker-compose.yml>/<database_name>"

NOTA: Eu nunca recebi nenhum IP (por exemplo, localhost, 127.0.0.1) para funcionar usando qualquer método neste segmento. A ideia de usar o nome do contêiner em vez do localhost veio daqui: https://github.com/docker-library/postgres/issues/297

Defina seu esquema:

from sqlalchemy import MetaData
db = SQLAlchemy(app, metadata=MetaData(schema="<schema_name>"))

Defina seu caminho de pesquisa para suas funções ao configurar sua sessão:

db.session.execute("SET search_path TO <schema_name>")

0

Eu tive exatamente o mesmo problema que Peter Eisentraut descreveu. Usando o netstat -nlp | grep 5432comando, pude ver o servidor ouvindo no soquete /tmp/.s.PGSQL.5432.

Para corrigir isso, basta editar seu postgresql.confarquivo e alterar as seguintes linhas:

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

Agora execute service postgresql-9.4 restart(Substitua 9-4 pela sua versão) e as conexões remotas devem estar funcionando agora.

Agora, para permitir conexões locais, basta criar um link simbólico para o /var/run/postgresqldiretório.

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

Não se esqueça de verificar se o seu também pg_hba.confestá configurado corretamente.


0

No meu caso, tudo o que eu precisava fazer era o seguinte:

sudo service postgresql restart

e depois

sudo -u postgres psql

Isso funcionou muito bem. Espero que ajude. Felicidades :) .


0

Encontre seu arquivo:

sudo find /tmp/ -name .s.PGSQL.5432

Resultado:

/tmp/.s.PGSQL.5432

Faça o login como usuário do postgres:

su postgres
psql -h /tmp/ yourdatabase

0

Eu tive o mesmo problema (no Ubuntu 15.10 (ardiloso)). sudo find / -name 'pg_hba.conf' -printou sudo find / -name 'postgresql.conf' -printapareceu vazio. Antes disso, parecia que várias instâncias do postgresql foram instaladas.

Você pode ter similar quando vê como instalado ou problemas de dependência listados

.../postgresql
.../postgresql-9.x 

e assim por diante.

Nesse caso, você deve sudo apt-get autoremovecada pacote 1 por 1.

Depois disso, siga as instruções e você ficará bem. Especialmente quando se trata de importar e adicionar chaves à lista de fontes PRIMEIRO

sudo apt-get update && sudo apt-get -y install python-software-properties && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Se não estiver usando astuciosamente, substitua wilypela sua liberação, ou seja, pela saída delsb_release -cs

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
sudo apt-get update && sudo apt-get install postgresql-9.3 pgadmin3

E então você deve estar bem e ser capaz de conectar e criar usuários.

Saída esperada:

Creating new cluster 9.3/main ...
config /etc/postgresql/9.3/main
data   /var/lib/postgresql/9.3/main
locale en_US.UTF-8
socket /var/run/postgresql
port   5432

Fonte das minhas soluções (créditos)


0

Enquanto estava com o mesmo problema, tentei algo diferente:

Iniciando o daemon postgresql manualmente, obtive:

FATAL:  could not create shared memory segment ...
   To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's
   shared memory usage, perhaps by reducing shared_buffers or max_connections.

Então o que eu fiz foi para definir um limite inferior para shared_bufferse max_connectionsem postgresql.confe restarto serviço.

Isso resolveu o problema!

Aqui está o log de erros completo:

$ sudo service postgresql start
 * Starting PostgreSQL 9.1 database server                                                                                                                                                               * The PostgreSQL server failed to start. Please check the log output:
2013-06-26 15:05:11 CEST FATAL:  could not create shared memory segment: Invalid argument
2013-06-26 15:05:11 CEST DETAIL:  Failed system call was shmget(key=5432001, size=57237504, 03600).
2013-06-26 15:05:11 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

0

Após muitas tentativas exaustivas, encontrei a solução com base em outros posts!

dpkg -l | grep postgres
apt-get --purge remove <package-founded-1> <package-founded-2>
whereis postgres
whereis postgresql
sudo rm -rf <paths-founded>
sudo userdel -f postgres

0

Crie o diretório postgresql dentro de run e execute o seguinte comando.

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

0

Basta adicionar / tmp unix_socket_directories

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.