confusão de porta postgresql 5433 ou 5432?

128

Eu instalei o postgresql no OSX. Quando executo o psql, recebo

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

No entanto, em / etc / services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <tgl@sss.pgh.pa.us>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433 é ocupado por pyrrho, 5432 é atribuído à pág. Eu posso me conectar com

psql -p 5432

mas por que o psql pensa que é 5433 e como faço para que o psql pareça no lugar certo por padrão?

alta largura de banda
fonte
5
Verifique se a variável de ambiente PGPORTestá definida: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Respostas:

187

/etc/servicesé apenas informativo, é uma lista de portas conhecidas. Isso não significa que algo esteja realmente em execução nessa porta ou que o serviço nomeado será executado nessa porta.

No caso do PostgreSQL, é típico usar a porta 5432, se estiver disponível. Caso contrário, a maioria dos instaladores escolherá a próxima porta livre, geralmente 5433.

Você pode ver o que realmente está sendo executado usando a netstatferramenta (disponível no OS X, Windows e Linux, com a sintaxe da linha de comando variando entre os três).

Isso é ainda mais complicado nos sistemas Mac OS X pela bagunça horrível dos diferentes pacotes do PostgreSQL - a versão antiga do PostgreSQL da Apple incorporada ao sistema operacional, Postgres.app, Homebrew, Macports, instalador do EnterpriseDB, etc.

O que acaba acontecendo é que o usuário instala a página e inicia um servidor a partir de um pacote, mas usa o cliente psqle libpqde um pacote diferente. Normalmente, isso ocorre quando eles executam o Postgres.app ou o homebrew Pg e se conectam aos psqlque são fornecidos com o sistema operacional. Às vezes, eles não apenas têm portas padrão diferentes, mas a página que acompanha o Mac OS X possui um caminho de soquete unix padrão diferente ; portanto, mesmo se o servidor estiver executando na mesma porta, ele não estará ouvindo o mesmo soquete unix.

A maioria dos usuários de Mac resolve isso usando apenas tcp / ip com psql -h localhost. Você também pode especificar uma porta, se necessário, por exemplo psql -h localhost -p 5433. Você pode ter várias instâncias do PostgreSQL em execução. Verifique se você está se conectando à correta usando select version()e SHOW data_directory;.

Você também pode especificar um diretório de soquete unix; verifique a unix_socket_directoriesconfiguração da instância do PostgreSQL à qual você deseja se conectar e especifique-a com psql -h, por exemplo psql -h /tmp.

Uma solução mais limpa é corrigir seu sistema PATHpara que o psqle libpqassociado ao PostgreSQL que você está executando seja o primeiro encontrado no PATH. Os detalhes dependem da versão do Mac OS X e dos pacotes Pg que você instalou. Não uso o Mac e não posso oferecer muito mais detalhes desse lado sem gastar mais tempo do que o atualmente disponível.

Craig Ringer
fonte
23

Resposta rápida no OSX, defina suas variáveis ​​de ambiente.

>export PGHOST=localhost

>export PGPORT=5432

Ou o que você precisar.

DavidLStacy
fonte
16

A porta padrão do Postgres é normalmente configurada em:

sudo vi /<path to your installation>/data/postgresql.conf

No Ubuntu, isso pode ser:

sudo vi /<path to your installation>/main/postgresql.conf

Procure portneste arquivo.

Risadinha
fonte
No Mac OSX com a distribuição BigSQL, está aqui: #~/PostgreSQL/data/pg96
Shane
7

Graças à @a_horse_with_no_name 's comentário , eu mudei minha definição PGPORT para 5432 em pg_env.sh. Isso resolveu o problema para mim. Não sei por que o postgres o definiu como 5433 inicialmente quando estava hospedando o serviço no 5432.

alta largura de banda
fonte
7

Parece que um dos motivos mais comuns para isso acontecer é se você instalar uma nova versão do PostgreSQL sem interromper o serviço de uma instalação existente. Essa também era uma dor de cabeça em particular. Antes de instalar ou atualizar, principalmente no OS X e usar o instalador com um clique do Enterprise DB, verifique o status da instalação antiga antes de continuar.

Eron Lloyd
fonte
Sim, nós instalado postgresql-9.5 ao 9.4 já foi instalado, assim 9,5 escolheu 5433 como a porta padrão
vikingsteve
Eu uso o 5432 e o 5433 há muito tempo, já vi o 5436, mas não faço ideia se isso é apenas criatividade de alguém ou algum padrão em sistemas operacionais diferentes.
Deil
3

Também me deparei com esse problema, e havia dois servidores postgres em execução ao mesmo tempo. Eu desinstalei um deles e mudei a porta novamente para 5432 e funciona bem agora.

Krazzzeee
fonte
2

Para mim, no PgAdmin 4 no Mac OS High Sierra , clicar no banco de dados PostrgreSQL10 em Servidores na coluna esquerda e depois na guia Propriedades , mostrou 5433 como a porta em Conexão . (Não sei por que, porque escolhi o 5432 durante a instalação). De qualquer forma, cliquei no ícone Editar na guia Propriedades , mude para 5432 , salvei e resolvi o problema. Vai saber.

Alan Simpson
fonte
Tudo o que faz é permitir que você se conecte ao servidor já em execução no 5432, e é por isso que você pode se conectar depois de fazer isso. O servidor estava sendo executado em 5432 por sua instalação, como você afirmou corretamente.
21418 Shane