postgresql puerto confusión 5433 o 5432?

128

He instalado postgresql en OSX. Cuando ejecuto psql, obtengo

$ 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"?

Sin embargo, desde / 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 está ocupado por pyrrho, 5432 está asignado a pg. Me puedo conectar con

psql -p 5432

pero ¿por qué psql piensa que es 5433 y cómo hago que psql se vea en el lugar correcto de forma predeterminada?

highBandWidth
fuente
55
Compruebe si la variable de entorno PGPORTestá definida: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Respuestas:

187

/etc/serviceses solo un aviso, es una lista de puertos conocidos. No significa que algo realmente se esté ejecutando en ese puerto o que el servicio nombrado se ejecutará en ese puerto.

En el caso de PostgreSQL, es típico usar el puerto 5432 si está disponible. Si no es así, la mayoría de los instaladores elegirán el próximo puerto libre, generalmente 5433.

Puede ver qué se está ejecutando realmente con la netstatherramienta (disponible en OS X, Windows y Linux, con una sintaxis de línea de comandos que varía entre los tres).

Esto se complica aún más en los sistemas Mac OS X por el horrible desastre de diferentes paquetes de PostgreSQL: la antigua versión de PostgreSQL de Apple integrada en el sistema operativo, Postgres.app, Homebrew, Macports, el instalador EnterpriseDB, etc.

Lo que termina sucediendo es que el usuario instala Pg e inicia un servidor desde un paquete, pero usa el cliente psqly libpqdesde un paquete diferente. Por lo general, esto ocurre cuando ejecutan Postgres.app o homebrew Pg y se conectan con el psqlque se incluye con el sistema operativo. No solo a veces tienen puertos predeterminados diferentes, sino que la Pg que se incluye con Mac OS X tiene una ruta de socket Unix predeterminada diferente , por lo que incluso si el servidor se ejecuta en el mismo puerto, no escuchará el mismo socket Unix.

La mayoría de los usuarios de Mac evitan esto simplemente usando tcp / ip con psql -h localhost. También puede especificar un puerto si es necesario, por ejemplo psql -h localhost -p 5433. Es posible que tenga varias instancias de PostgreSQL ejecutándose, así que asegúrese de conectarse a la correcta utilizando select version()y SHOW data_directory;.

También puede especificar un directorio de socket Unix; verifique la unix_socket_directoriesconfiguración de la instancia de PostgreSQL a la que desea conectarse y especifique eso con psql -h, por ejemplo psql -h /tmp.

Una solución más limpia es corregir su sistema PATHpara que lo que se encuentre primero en el psqly libpqasociado con el PostgreSQL que realmente está ejecutando PATH. Los detalles dependen de la versión de Mac OS X y de los paquetes de Pg que haya instalado. No uso Mac y no puedo ofrecer muchos más detalles de ese lado sin pasar más tiempo del que está disponible actualmente.

Craig Ringer
fuente
24

Respuesta rápida en OSX, configure sus variables de entorno.

>export PGHOST=localhost

>export PGPORT=5432

O lo que necesites.

DavidLStacy
fuente
16

El puerto predeterminado de Postgres se configura comúnmente en:

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

En Ubuntu esto podría ser:

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

Buscar porten este archivo.

Risadinha
fuente
En Mac OSX con la distribución BigSQL está aquí:~/PostgreSQL/data/pg96
Shane
7

Gracias a @a_horse_with_no_name 's comentario , he cambiado mi definición PGPORT a 5432 en pg_env.sh. Eso solucionó el problema para mí. No sé por qué Postgres lo configuró inicialmente como 5433 cuando alojaba el servicio en 5432.

highBandWidth
fuente
7

Parece que una de las razones más comunes por las que esto sucede es si instala una nueva versión de PostgreSQL sin detener el servicio de una instalación existente. Este fue un dolor de cabeza particular mío también. Antes de instalar o actualizar, particularmente en OS X y usar el instalador de un clic de Enterprise DB, asegúrese de verificar el estado de la instalación anterior antes de continuar.

Eron Lloyd
fuente
Sí, instalamos postgresql-9.5 cuando 9.4 ya estaba instalado, por lo que 9.5 eligió 5433 como puerto predeterminado
vikingsteve
He usado 5432 y 5433 durante mucho tiempo, he visto 5436 pero no tengo idea si eso es solo creatividad o algún defecto en diferentes sistemas operativos.
Deil
3

Me encontré con este problema también, terminó teniendo dos servidores postgres ejecutándose al mismo tiempo. Desinstalé uno de ellos y cambié el puerto a 5432 y ahora funciona bien.

Krazzzeee
fuente
2

Para mí en PgAdmin 4 en Mac OS High Sierra , al hacer clic en la base de datos PostrgreSQL10 en Servidores en la columna izquierda, luego en la pestaña Propiedades , se mostró 5433 como el puerto en Conexión . (No sé por qué, porque elegí 5432 durante la instalación). De todos modos, hice clic en el ícono Editar debajo de la pestaña Propiedades , lo cambié a 5432 , lo guardé y eso resolvió el problema. Imagínate.

Alan Simpson
fuente
Todo lo que hace es permitirle conectarse al servidor que ya se está ejecutando en 5432, por lo que podría conectarse después de hacerlo. El servidor se estaba ejecutando en 5432 por su instalación como usted indicó correctamente.
Shane