No se puede conectar a postgresql en el puerto 5432

82

Instalé la pila de Bitnami Django que incluía PostgreSQL 8.4.

Cuando ejecuto psql -U postgresme sale el siguiente error:

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

PG definitivamente se está ejecutando y el pg_hba.confarchivo se ve así:

# 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

¿Lo que da?

"Prueba" de que se está ejecutando pg:

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# 
Assaf Lavie
fuente
No tengo idea de lo que estás preguntando y nunca me diste tu opinión. Estas son 100 personas que obtienen un error genérico e informan cosas diferentes. Está totalmente fuera de formato para el sitio.
Evan Carroll

Respuestas:

87

Este problema proviene de la instalación del postgrespaquete sin un número de versión. Aunque postgresse instalará y será la versión correcta, el script para configurar el clúster no se ejecutará correctamente; Es un problema de embalaje.

Si se siente cómodo, postgreshay un script que puede ejecutar para crear este clúster y comenzar a postgresejecutarlo. Sin embargo, hay una manera más fácil.

Primero purgue la antigua instalación de postgres. El problema actualmente radica en 9.1, así que supondré que eso es lo que has instalado

sudo apt-get remove --purge postgresql-9.1

Ahora simplemente reinstale

sudo apt-get install postgresql-9.1

Anote el nombre del paquete con el número de versión. HTH.

Stewart
fuente
3
Esto me ayudó con Postgres 9.3.
sevenseacat
1
Esta debería ser la respuesta aceptada, también funciona con postgres 9.4 / ubuntu 14.10
Malte
1
Esta respuesta me ayudó con la mezcla de Postgres 9.4 y 9.3. Bueno.
Ingo
2
Trabajó para ubuntu 16.04 y postgres 9.5, pero primero tuve que purgar todos los paquetes relacionados con postgres.
Evert
2
¡Esta es realmente una respuesta increíble! Y también una experiencia de usuario horrible en el lado de
Postgres
23

El mensaje de error se refiere a un socket de dominio Unix, por lo que debe modificar su netstatinvocación para no excluirlos. Así que pruébalo sin la opción -t:

netstat -nlp | grep 5432

Supongo que el servidor realmente está escuchando en el zócalo en /tmp/.s.PGSQL.5432lugar del /var/run/postgresql/.s.PGSQL.5432que su cliente está intentando conectarse. Este es un problema típico cuando se usan paquetes PostgreSQL compilados a mano o de terceros en Debian o Ubuntu, porque la fuente predeterminada para el directorio de socket de dominio Unix es /tmppero el paquete Debian lo cambia /var/run/postgresql.

Posibles soluciones:

  • Use los clientes suministrados por su paquete de terceros (llamada /opt/djangostack-1.3-0/postgresql/bin/psql). Posiblemente desinstale los paquetes proporcionados por Ubuntu por completo (puede ser difícil debido a otras dependencias inversas).
  • Arregle el directorio de socket del paquete de terceros para que sea compatible con Debian / Ubuntu.
  • Use -H localhostpara conectarse a través de TCP / IP en su lugar.
  • Use -h /tmpuna PGHOSTconfiguración equivalente para apuntar al directorio correcto.
  • No use paquetes de terceros.
Peter Eisentraut
fuente
19

Esto funciona para mi:

Editar: postgresql.conf

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

Habilitar o agregar:

listen_addresses = '*'

Reinicie el motor de la base de datos:

sudo service postgresql restart

Además, puedes consultar el archivo pg_hba.conf

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

Y agregue su red o dirección de host:

host    all             all             192.168.1.0/24          md5
angelical
fuente
listen_address = '*' hizo el truco. solo escuchaba en "localhost" y no en 127.0.0.1. ¡gracias!
mwm
Dios mío ... finalmente algo funcionó, nada más funcionó hasta que agregué la dirección y la dirección de escucha no comentada.
AntonB
¡Mas uno! Funcionó para mi.
Atul Makwana
1
esto funciona en ubuntu windows bash.
ahmadalibaloch
Puedo confirmar que funciona en el comando bash del servidor Ubuntu en Windows 10.
Ronald
18

Puede usar psql -U postgres -h localhostpara forzar la conexión a través de TCP en lugar de sockets de dominio UNIX; su netstatsalida muestra que el servidor PostgreSQL está escuchando en el puerto 5432 de localhost.

Puede averiguar qué socket UNIX local utiliza el servidor PostgrSQL utilizando una invocación diferente de netstat :

netstat -lp --protocol=unix | grep postgres

En cualquier caso, las interfaces en las que escucha el servidor PostgreSQL están configuradas postgresql.conf.

Riccardo Murri
fuente
17

Simplemente cree un enlace suave como este:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Uriel
fuente
1
Esto funcionó para mí y parecía ser la solución más fácil sin tener que cambiar su configuración postgresql. Asegúrese de ser superusuario cuando intente hacer un enlace.
brendan
2
ln: no se pudo crear el enlace simbólico '/var/run/postgresql/.s.PGSQL.5432': El archivo existe
P_M
He creado la carpeta "postgresql" en el directorio / var / run /. No existía.
Ikrom
Funciona increíble, ¿cuál es la razón detrás de esto?
Teoman shipahi
7

Hago que funcione haciendo esto:

dpkg-reconfigure locales

Elija sus configuraciones regionales preferidas y luego ejecute

pg_createcluster 9.5 main --start

(9.5 es mi versión de postgresql)

/etc/init.d/postgresql start

y luego funciona!

sudo su - postgres
psql
mymusise
fuente
Ja, lo siento, creo que los comandos lo han dejado claro. para mí, encuentro este problema cuando reinstalo postgresql, intento reiniciarlo por tipo service postgresql restart pero dice que no tenía ningún clúster postgresql. Entonces encuentro esta manera de ayudarme :)
mymusise
Bueno, después de tres horas de Google finalmente resolviste mi problema. dpkg-reconfigure localesEs muy importante.
Don Mums
5

Tuve que compilar PostgreSQL 8.1 en Debian Squeeze porque estoy usando Project Open, que se basa en OpenACS y no se ejecutará en versiones más recientes de PostgreSQL.

La configuración por defecto de compilación pone el unix_socketen /tmp, pero Abrir proyecto, que se basa en PostgreSQL, no funcionaría, ya que busca el unix_socketal /var/run/postgresql.

Hay una configuración postgresql.confpara establecer la ubicación del zócalo. Mi problema era que podía establecer /tmpy psqltrabajar, pero no abrir el proyecto, o podía configurarlo /var/run/postgresqly psqlno funcionaría, pero el proyecto abierto sí.

Una solución al problema es establecer el socket /var/run/postgresqly luego ejecutarlo psql, según la sugerencia de Peter, como:

psql -h /var/run/postgresql

Esto se ejecuta localmente usando permisos locales. El único inconveniente es que es más tipeado que simplemente "psql".

La otra sugerencia que alguien hizo fue crear un enlace simbólico entre las dos ubicaciones. Esto también funcionó, pero el enlace desapareció al reiniciar. Tal vez sea más fácil usar el argumento -h, sin embargo, creé el enlace simbólico desde el script PostgreSQL en /etc/init.d. Coloqué el comando de creación de enlace simbólico en la sección "inicio". Por supuesto, cuando emito un comando detener e iniciar o reiniciar, intentará recrear un enlace simbólico existente, pero aparte del mensaje de advertencia, probablemente no haya ningún daño en eso.

En mi caso, en lugar de:

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

yo tengo

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

y ha establecido explícitamente el unix_socket /var/run/postgresql/.s.PGSQL.5432en postgresql.conf.

Joe
fuente
3

Solución:

Hacer esto

export LC_ALL="en_US.UTF-8"

y esto. ( 9.3 es mi versión actual de PostgreSQL. ¡Escriba su versión!)

sudo pg_createcluster 9.3 main --start
bogdanvlviv
fuente
woooow, fue el único que resolvió mi problema, gracias.
user3687723
3

Si su servicio de Postgres está funcionando sin ningún error o no hay ningún error al iniciar el servicio de Postgres y aún recibe el error mencionado, siga estos pasos

Paso 1: la ejecución pg_lsclustersenumerará todos los clústeres de Postgres que se ejecutan en su dispositivo

p.ej:

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

lo más probable es que el estado sea bajo en su caso y servicio postgres

Paso 2: reinicia el pg_ctlcluster

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

#restart postgres
sudo service postgres restart

Paso 3: el paso 2 falló y arrojó un error

Si este proceso no tiene éxito, arrojará un error. Puedes ver el error de inicio de sesión/var/log/postgresql/postgresql-9.6-main.log

Mi error fue:

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`

Paso 4: verifique la propiedad de postgres

Asegúrate de que postgressea ​​el dueño de/var/lib/postgresql/version_no/main

Si no, corre

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

Paso 5: Verifique que el usuario postgres pertenece al grupo de usuarios ssl-cert

Resultó que había eliminado por error al usuario de Postgres del ssl-certgrupo. Ejecute el siguiente código para solucionar el problema del grupo de usuarios y corregir los permisos

#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
Noushad
fuente
2

En mi caso, fue causado por un error tipográfico que hice mientras editaba /etc/postgresql/9.5/main/pg_hba.conf

Cambié:

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

a:

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

Pero MD5tenía que estar en minúsculas md5:

# Database administrative login by Unix domain socket
local   all             postgres                                md5
Mehdi Nellen
fuente
1
Esta es la respuesta que lo solucionó para mí :) Anteriormente había cambiado el mío por el mío en trustedlugar de trust, y no reinicié el servicio, y solo se rompió al día siguiente cuando ya olvidé lo que cambié
Phlippie Bosman el
2

Descubrí que desinstalar Postgres no parece convincente. Esto ayuda a resolver mi problema:

  1. Inicie el servidor postgres:

    sudo systemctl start postgresql
    
  2. Asegúrese de que el servidor se inicie en el arranque:

    sudo systemctl enable postgresql
    

Puede encontrar información detallada en el sitio de DigitalOcean aquí.

parpa neupane
fuente
2

No pude resolver este problema con mi servidor postgres-9.5. Después de 3 días de progreso cero intentando cada permutación de corrección en este y otros sitios, decidí reinstalar el servidor y perder 5 días de trabajo. Pero sí reproduje el problema en la nueva instancia. Esto podría proporcionar alguna perspectiva sobre cómo solucionarlo antes de tomar el enfoque catastrófico que hice.

Primero, deshabilite todas las configuraciones de registro en postgresql.conf. Esta es la sección:

# ERROR REPORTING AND LOGGING

Comenta todo en esa sección. Luego reinicie el servicio.

Al reiniciar, use /etc/init.d/postgresql start o restart me pareció útil estar en modo de superusuario mientras se reinicia. Tenía una ventana x abierta solo para esa operación. Puede establecer ese modo de superusuario con sudo -i.

Verifique que se pueda llegar al servidor con este simple comando: psql -l -U postgres

Si eso no lo soluciona, considere esto:

Estaba cambiando la propiedad de muchas carpetas mientras intentaba encontrar una solución. Sabía que probablemente estaría tratando de revertir las propiedades de las carpetas y chmods por 2 días más. Si ya se ha metido con las propiedades de esas carpetas y no desea purgar completamente su servidor, comience a rastrear la configuración de todas las carpetas afectadas para que vuelvan al estado original. Es posible que desee intentar realizar una instalación paralela en otro sistema y verificar sistemáticamente la propiedad y la configuración de todas las carpetas. Tedioso, pero puede obtener acceso a sus datos.

Una vez que obtenga acceso, cambie sistemáticamente cada línea relevante en la # ERROR REPORTING AND LOGGINGsección del postgresql.confarchivo. Reiniciar y probar. Descubrí que la carpeta predeterminada para los registros estaba causando un error. Comenté específicamente log_directory. La carpeta predeterminada en la que el sistema coloca los registros es entonces /var/log/postgresql.

jurban1997
fuente
1

Posiblemente podría haber sucedido porque cambió los permisos de la /var/lib/postgresql/9.3/maincarpeta.

Intenta cambiarlo a 700 usando el siguiente comando:

sudo chmod 700 main
Farzin
fuente
1

Esto no está exactamente relacionado con la pregunta ya que estoy usando Flask, pero este fue el error exacto que recibí y este fue el hilo más relevante para obtener ideas.

Mi configuración: Subsistema de Windows para Linux, Docker-compose w / makefile w / dockerfile, Flask, Postgresql (usando un esquema que consiste en tablas)

Para conectarse a postgres, configure su cadena de conexión de esta manera:

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: Nunca obtuve ninguna IP (por ejemplo, localhost, 127.0.0.1) para trabajar usando ningún método en este hilo. La idea para usar el nombre del contenedor en lugar de localhost surgió de aquí: https://github.com/docker-library/postgres/issues/297

Establece tu esquema:

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

Establezca su ruta de búsqueda para sus funciones cuando configure su sesión:

db.session.execute("SET search_path TO <schema_name>")
Josh Graham
fuente
0

Tuve exactamente el mismo problema que Peter Eisentraut describió. Usando el netstat -nlp | grep 5432comando, pude ver que el servidor estaba escuchando en el socket /tmp/.s.PGSQL.5432.

Para solucionar esto, solo edite su postgresql.confarchivo y cambie las siguientes líneas:

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

Ahora ejecute service postgresql-9.4 restart(Reemplace 9-4 con su versión), y las conexiones remotas deberían estar funcionando ahora.

Ahora para permitir conexiones locales, simplemente cree un enlace simbólico al /var/run/postgresqldirectorio.

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

No olvides asegurarte de que tu también pg_hba.confesté configurado correctamente.

Justin Lessard
fuente
0

En mi caso, todo lo que tenía que hacer era esto:

sudo service postgresql restart

y entonces

sudo -u postgres psql

Esto funcionó bien. Espero eso ayude. Salud :) .

Pranay Dugar
fuente
0

Encuentra tu archivo:

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

Resultado:

/tmp/.s.PGSQL.5432

Inicie sesión como usuario de postgres:

su postgres
psql -h /tmp/ yourdatabase
Waldeyr Mendes da Silva
fuente
0

Tuve el mismo problema (en Ubuntu 15.10 (astuto)). sudo find / -name 'pg_hba.conf' -printo sudo find / -name 'postgresql.conf' -printapareció vacío. Antes de eso parecía que se instalaron varias instancias de postgresql.

Es posible que tenga similar cuando vea como instalado, o una lista de problemas de dependencia

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

y así.

En ese caso, debe sudo apt-get autoremovecada paquete 1 por 1.

Luego, sigue esto al pie de la letra y estarás bien. Especialmente cuando se trata de importar y agregar claves a la lista de origen PRIMERO

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 -

Si no usa wily, reemplácelo wilycon su versión, es decir, con la salida 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

Y entonces deberías estar bien y ser capaz de conectarte y crear usuarios.

Rendimiento esperado:

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

Fuente de mis soluciones (créditos)

Grmn
fuente
0

Mientras tenía el mismo problema, probé algo diferente:

Iniciando el demonio postgresql manualmente obtuve:

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.

Así que lo que hice fue establecer un límite inferior para shared_buffersy max_connectionsdentro postgresql.confy restartel servicio.

Esto solucionó el problema!

Aquí está el registro de errores 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.
DrFalk3n
fuente
0

¡Después de muchos intentos agotadores, encontré la solución basada en otras publicaciones!

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
Douglas Rosa
fuente
0

Cree el directorio postgresql dentro de ejecutar y luego ejecute el siguiente comando.

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Pradeep Maurya
fuente
0

Simplemente agregue / tmp unix_socket_directories

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
Azul
fuente