Arquivo de soquete “/var/pgsql_socket/.s.PGSQL.5432” ausente no Mountain Lion (OS X Server)

95

Acabei de atualizar meu MacMini Server do Lion Server para o Mountain Lion usando o OS X Server. Estou tendo o mesmo problema com o PostgreSQL que tive no ano passado, quando instalei o Lion Server pela primeira vez.

Quando tento executar qualquer tipo de comando de terminal do PostgreSQL, recebo a seguinte mensagem de erro notória que muitos receberam ao longo dos anos:

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

Eu estava tentando alterar a senha de _postgres quando recebi o erro. Tentei vários comandos, mas obtive o mesmo erro. Acabei de reiniciar meu servidor, mas sem sorte. Eu loguei como root para olhar em / var / pgsql_socket e a pasta está vazia. A pasta / var / pgsql_socket_alt também está vazia.

Eu verifiquei online sobre isso. No entanto, quase todas as soluções que li, incluindo no Stack Overflow, sugerem a remoção e reinstalação do PostgreSQL. Não sei, mas não me parece uma opção plausível porque várias opções no App de servidor usam PostgreSQL. Entrei em contato com o Apple Enterprise Support (sem acordo) e fui informado de que meu problema teria que ser resolvido pelos desenvolvedores, que gerariam $ 695.

Eu tenho um site que está fora do ar porque não consigo reconstruí-lo. Não sei onde buscar ajuda com isso neste momento. Vou continuar procurando online para ver se consigo encontrar algo. No entanto, espero que alguém possa me dar uma resposta rápida para que eu possa reconstruir meu banco de dados.

Atualização: 13/12/2012 15:33 GMT-6

Aqui está minha saída para ps auwwx | grep postg:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

Atualização: 13/12/2012 18:10 GMT-6

Após intensa pesquisa na web, este vídeo foi encontrado. Consegui fazer o PostgreSQL funcionar e remover o erro. Consigo me conectar usando pgadmin e phppgadmin. Eu estava prestes a voltar para o Lion Server por pura frustração. Agora não vou precisar.

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Pamela Cook - LightBe Corp
fonte
22
O problema se resume ao fato de que a versão Mac OS X pré-instalado de PostgreSQL do psqlestá do seu PATHantes da versão que você instalou. Eles procuram o soquete Unix em lugares diferentes. Use tcp / ip especificando -h localhostou, de preferência, corrija seu PATHpara que o correto psqlseja encontrado primeiro. A decisão bizarra da Apple de não apenas empacotar o PostgreSQL, mas mexer com ele para colocar as coisas em lugares não padronizados é a causa raiz deste problema.
Craig Ringer
3
Há um problema contínuo no OSX, onde os empacotadores decidiram colocar o soquete do domínio unix em um lugar diferente do normal. Deixe-me pesquisar ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser
Copiei um PATH antigo em .bashrc. Não instalei outra versão do postgreSQL. Aqui está minha instrução PATH que inclui código para RVM. Se alguém pudesse me dizer como mudar, eu farei isso. Quando faço esse psql, ele é encontrado em / usr / bin / psql. Muito obrigado por todos vocês por sua ajuda. PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" Também estou procurando o arquivo de socket enquanto estou logado como root.
Pamela Cook - LightBe Corp
1
Para quem usa homebrewe osx@CraigRinger pode ter a resposta certa para você, confirme com brew doctor.
Karthik T

Respostas:

299

Consegui adicionar o seguinte ao meu .bash_profile para evitar o erro:

export PGHOST=localhost

Isso funciona porque :

Se você omitir o nome do host, o psql se conectará por meio de um soquete de domínio Unix a um servidor no host local ou via TCP / IP ao host local em máquinas que não têm soquetes de domínio Unix.

Seu sistema operacional oferece suporte a soquetes de domínio Unix, mas o soquete Unix do PostgreSQL que psqlprecisa não existe ou está em um local diferente do esperado.

Especificar um nome de host explicitamente como localhostforça psqlpara usar TCP / IP. Definir uma variável de ambiente PGHOSTé uma das maneiras de conseguir isso. Está documentado no manual do psql .

mmasters
fonte
37
Para qualquer um que esteja executando isso com um aplicativo Rails: você pode especificar o host em database.yml.
dwhalen
12
Que tipo de bruxaria é essa? Quer dizer, sério. Você poderia explicar?
Sreejith Ramakrishnan
1
Eu sempre volto a esta resposta! Salvei minha vida novamente. Este snippet realmente pertence a esta página, postgresapp.com/documentation/cli-tools.html .
sambecker de
1
Não sei por que, mas funciona para mim! Encontrei esse problema no rails 5 quando uso 'rails db: create', mas já configurei o host: localhostem database.yml. @dwhalen
Spark.Bao
1
Isso funcionou para o Rails 5.2 sem modificação database.yml, quando esse erro apareceu após o downgrade do Postgres para uma versão mais antiga gerenciada pelo Homebrew.
SexxLuthor
37

Tente colar no console:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Bryan Algutria
fonte
Finalmente, obtive esta resposta.
Abs
Boa. Embora eu ache que sei por que isso está funcionando, um pouco mais de explicação seria útil. Esta solução é melhor do que a resposta aceita, faltam apenas os detalhes.
Glutexo
23

Consegui resolver simplesmente preenchendo 127.0.0.1 para o endereço do host PostgreSQL em vez de deixá-lo em branco. (Exemplo de Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}
Nick Woodhams
fonte
1
Eu me sinto meio idiota agora, estou tentando consertar esse problema há cerca de 2 dias. No Windows, eu estava usando '127.0.0.1', mas movi meu código para produção (Debian 7) e tive que alterá-lo para ''. É meio estranho que eles dêem uma mensagem de erro que leva a crer que o problema pode estar em outro lugar.
fang_dejavu
10

Abra 'postgresql.conf' em seu editor favorito. Procure a variável 'unix_socket_directories', provavelmente será assim:

unix_socket_directories = '/private/tmp/'

Mude a linha para esta:

unix_socket_directories = '/var/pgsql_socket/'

Observe se você deseja que os arquivos de socket em mais de um diretório os separe por vírgula.

Craig Thomas
fonte
Isso teve o efeito desejado de tentar criar o soquete em outro lugar, mas o servidor não iniciaria porque não tinha as permissões para criar arquivos no diretório / var. Acabei alterando os arquivos de configuração em um nível superior para simplesmente usar o soquete onde estava originalmente. Praticamente conforme dado nesta resposta stackoverflow.com/a/29511357/1535177 .
Eosis de
7

Conforme mencionado por outros nos comentários, uma solução realmente simples para esse problema é declarar o 'host' do banco de dados dentro da configuração do banco de dados. Adicionando esta resposta apenas para torná-la um pouco mais clara para quem está lendo isso.

Em um aplicativo Ruby on Rails, por exemplo, edite /config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

Nota: a última linha adicionada para especificar o host. Antes de atualizar para o Yosemite, nunca precisei especificar o host dessa forma.

Espero que isso ajude alguém.

Felicidades

David Battersby
fonte
Eu precisava definir meu host para o diretório que encontrei continha o .s.PGSQL.5432arquivo.
Eosis de
5

Verifique o status do banco de dados:

service postgresql status

Se o banco de dados não estiver em execução, inicie o banco de dados:

sudo service postgresql start
Sivakumar RJ
fonte
preso com o erro acima e resolvido iniciando o db.
Sivakumar RJ
4

Você pode verificar seu arquivo postgresql.conf ??

Em qual porta seu postgres está rodando ??

Acho que não está funcionando na porta 5432. Se não mudar para 5432

OU em uso de terminal

psql -U  postgres -p YOUR_PORT_NUMBER database_name
Caçador
fonte
1
Não consigo executar o comando do terminal. Recebo o mesmo erro. Preciso de ajuda sobre onde posso encontrar o arquivo postgresql.conf. Eu costumava ter uma pasta / var / pgsql ao executar o Lion Server. Eu acho que isso acabou agora. Acabei de postar minha saída para o comando ps grep. Ativei o serviço Wiki para executar o PostgreSQL. Disseram-me que eu poderia usar os comandos sudo serveradmin sem ativar nenhum serviço de aplicativo de servidor, mas eles não funcionam. Estou conectado como root agora, então devo ser capaz de fazer qualquer coisa :) Verifiquei as portas no Network Utility. 5432 não usado.
Pamela Cook - LightBe Corp
2

Eu tive esse problema com Django.

Corrija-o definindo explicitamente o nome do host como "localhost".

Ashwin Balamohan
fonte
2

eu faço em palavras fazendo isto:

dpkg-reconfigure locales

e escolha seus locais preferidos

pg_createcluster 9.5 main --start

(9.5 é minha versão do postgresql)

/etc/init.d/postgresql start

e então palavra!

sudo su - postgres
psql
mymusise
fonte
1
apt-get install postgres-xc-client
apt-get install postgres-xc
angela
fonte
1
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket"/var/pgsql_socket/.s.PGSQL.5432"?

Continuei recebendo o erro acima e nenhuma das soluções acima funcionou para mim. Finalmente, a solução a seguir resolveu meu problema no Mac OS X

Instale o postgres usando o brew

brew install postgres

Instale serviços de cerveja

brew tap homebrew/services

Para iniciar o postgres como um serviço de segundo plano

brew services start postgresql

Para parar o postgres manualmente

brew services stop postgresql

Também podemos usar o brew services para reiniciar o Postgres

brew services restart postgresql
Sudharshan
fonte
1

verifique se o servidor postgres está funcionando com o seguinte código

sudo service postgresql status

se o servidor postgres estiver inativo, escreva o seguinte comando.

sudo service postgresql start
wailinux
fonte
1

Recebi este erro depois que meu computador travou e reiniciou sozinho. A solução para mim não foi encontrada nesta página, mas em outra questão SO muito bem avaliada com o mesmo erro psql: não foi possível conectar ao servidor: Não existe esse arquivo ou diretório (Mac OS X) . A resposta: apenas exclua esse arquivo /usr/local/var/postgres/postmaster.pid, e faça brew services restart postgresqlo truque. Preste atenção ao aviso na resposta do link sobre como matar os processos do postgres antes de fazer isso, pois você pode corromper seu banco de dados permanentemente.

Wetjosh
fonte
0

As permissões de arquivo são restritivas no banco de dados Postgres pertencente ao Mac OS. Essas permissões são redefinidas após a reinicialização ou reinicialização do Postgres: por exemplo, serveradmin start postgres.

Portanto, redefina temporariamente as permissões ou propriedade:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

A reconfiguração de permissões não é segura, portanto, instale uma versão do banco de dados de sua propriedade para uma solução.

clewis
fonte
0

Demorei um pouco, mas finalmente consegui fazer isso funcionar depois de analisar as sugestões oferecidas e fazer pesquisas adicionais na web. Usei as informações do seguinte vídeo do YouTube criado por Mactasia:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Quando fiz isso, vi o arquivo com .lock como a extensão. No entanto, ainda recebo o erro quando tentei iniciar o servidor Rails quando retomei o trabalho em minha aplicação Rails usando PostgreSQL. Desta vez, recebi um erro de permissão negada. Foi quando me lembrei de que não apenas tive que alterar listen_addresses no plist, mas também tive que alterar unit_socket_permissions para 0777. Também fiz login como root para alterar as permissões na pasta var / pgsql_socket onde poderia acessá-la no nível de usuário. Postgres está funcionando bem agora. Estou recarregando meus dados do backup do SQL.

O que eu não entendi foi que quando eu tinha o wiki ativado, o PostgreSQL supostamente estava funcionando quando fiz um sudo serveradmin fullstatus postgres, mas ainda recebi o erro. Ah bem.

Pamela Cook - LightBe Corp
fonte
0

Acabei de criar um novo cluster e funcionou para mim, estava usando (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start
Bruno Filgueiras
fonte
0

Primeiro remova o postgres instalado:

sudo apt-get purge postgr*
sudo apt-get autoremove

Em seguida, instale o 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

Em seguida, instale o Postgres

sudo apt-get install postgresql postgresql-contrib
Gurudath BN
fonte
0

Para o aplicativo RubyOnRails, adicione localhost Se você usar a versão Postgresql personalizada

# config/database.yml
default: &default
  host: localhost
itsnikolay
fonte