Falta el archivo de socket “/var/pgsql_socket/.s.PGSQL.5432” en Mountain Lion (OS X Server)

95

Acabo de actualizar mi MacMini Server de Lion Server a Mountain Lion usando OS X Server. Tengo el mismo problema con PostgreSQL que tuve el año pasado cuando instalé Lion Server por primera vez.

Cuando trato de hacer cualquier tipo de comando de terminal de PostgreSQL, aparece el siguiente mensaje de error notorio que muchos han recibido a lo largo de los años:

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

Estaba intentando cambiar la contraseña de _postgres cuando recibí el error. Probé varios comandos pero obtuve el mismo error. Acabo de reiniciar mi servidor pero no tuve suerte. Inicié sesión como root para mirar / var / pgsql_socket y la carpeta está vacía. La carpeta / var / pgsql_socket_alt también está vacía.

He comprobado en línea sobre esto. Sin embargo, casi todas las soluciones que he leído, incluidas las de Stack Overflow, sugieren una eliminación y reinstalación de PostgreSQL. No lo sé, pero esta no parece una opción plausible porque varias opciones en la aplicación del servidor usan PostgreSQL. Me comuniqué con el soporte empresarial de Apple (sin acuerdo) y me dijeron que mi problema tendría que ser resuelto por los desarrolladores que arrojarían $ 695.

Tengo un sitio web que está caído en este momento porque no puedo reconstruirlo. No sé a dónde acudir para obtener ayuda con esto en este momento. Seguiré buscando en línea para ver si puedo encontrar algo. Sin embargo, espero que alguien pueda darme una respuesta rápida para que pueda reconstruir mi base de datos.

Actualización: 13/12/2012 15:33 GMT-6

Aquí está mi salida 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 

Actualización: 13/12/2012 18:10 GMT-6

Después de una intensa búsqueda en la web, se encontró este video. Pude hacer funcionar PostgreSQL y eliminar el error. Puedo conectarme usando pgadmin y phppgadmin. Estaba a punto de volver a Lion Server por pura frustración. Ahora no tendré que hacerlo.

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

Pamela Cook - LightBe Corp
fuente
22
Su problema se reduce al hecho de que la versión preinstalada para Mac OS X de PostgreSQL psqlestá en su PATHantes de la versión que instaló. Buscan el socket Unix en diferentes lugares. Utilice tcp / ip especificando -h localhosto, preferiblemente, corríjalo PATHpara que psqlse encuentre primero el correcto . La extraña decisión de Apple de no solo empaquetar PostgreSQL, sino meterse con él para colocar las cosas en lugares no estándar es la causa principal de este problema.
Craig Ringer
3
Hay un problema en curso en OSX, donde los empaquetadores decidieron colocar el socket de dominio Unix en un lugar diferente al normal. Déjame buscar ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser
Copié un antiguo PATH en .bashrc. No he instalado otra versión de postgreSQL. Aquí está mi declaración PATH que incluye código para RVM. Si alguien pudiera decirme cómo cambiarlo, lo haré. Cuando hago qué psql se encuentra en / usr / bin / psql. Muchas gracias a todos por su ayuda. RUTA = "$ RUTA: $ INICIO / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" También estoy buscando el archivo de socket mientras estoy conectado como root.
Pamela Cook - LightBe Corp
1
Para aquellos que usan homebrewy osx@CraigRinger pueden tener la respuesta correcta para usted, confirme con brew doctor.
Karthik T

Respuestas:

299

Pude agregar lo siguiente a mi .bash_profile para evitar el error:

export PGHOST=localhost

Esto funciona porque :

Si omite el nombre de host, psql se conectará a través de un socket de dominio Unix a un servidor en el host local, o vía TCP / IP a localhost en máquinas que no tienen sockets de dominio Unix.

Su sistema operativo admite sockets de dominio Unix, pero el socket Unix de PostgreSQL que psqlnecesita no existe o está en una ubicación diferente a la que espera.

Especificar un nombre de host de forma explícita localhostobliga psqla utilizar TCP / IP. Establecer una variable de entorno PGHOSTes una de las formas de lograrlo. Está documentado en el manual de psql .

maestros
fuente
37
Para cualquiera que se encuentre con esto con una aplicación Rails: puede especificar el host en database.yml.
dwhalen
12
¿Qué clase de brujería es esta? Es enserio. ¿Podrías explicar?
Sreejith Ramakrishnan
1
¡Siempre vuelvo a esta respuesta! Salvó mi vida de nuevo. Este fragmento realmente pertenece a esta página, postgresapp.com/documentation/cli-tools.html .
sambecker
1
No sé por qué, ¡pero me funciona! Encontré este problema en rails 5 cuando uso 'rails db: create', pero ya configuré el host: localhostarchivo en database.yml. @dwhalen
Spark.Bao
1
Esto funcionó para Rails 5.2 sin modificar database.yml, cuando apareció este error después de degradar Postgres a una versión anterior administrada por Homebrew.
SexxLuthor
37

Intente pegar en la consola esto:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Bryan Algutria
fuente
Finalmente, obtuve esta respuesta.
Abs
Bueno. Aunque creo que sé por qué funciona esto, sería útil un poco más de explicación. Esta solución es mejor que la respuesta aceptada, solo faltan los detalles.
Glutexo
23

Pude resolver simplemente completando 127.0.0.1 para la dirección de host de PostgreSQL en lugar de dejarlo en blanco. (Ejemplo 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
fuente
1
Me siento un poco tonto ahora, he estado tratando de solucionar este problema durante aproximadamente 2 días. En Windows estaba usando '127.0.0.1', pero luego moví mi código a producción (Debian 7) y tuve que cambiarlo a ''. Es un poco extraño que den un mensaje de error que nos lleve a pensar que el problema podría estar en otra parte.
fang_dejavu
10

Abra 'postgresql.conf' en su editor favorito. Busque la variable 'unix_socket_directories', lo más probable es que se vea así:

unix_socket_directories = '/private/tmp/'

Cambie la línea a esto:

unix_socket_directories = '/var/pgsql_socket/'

Tenga en cuenta que si desea que los archivos de socket en más de un directorio se separen con una coma.

Craig Thomas
fuente
Esto tuvo el efecto deseado de intentar crear el socket en otro lugar, pero el servidor no se iniciaba porque no tenía los permisos para crear archivos en el directorio / var. Terminé cambiando los archivos de configuración a un nivel superior para simplemente usar el socket donde estaba originalmente. Más o menos como se indica en esta respuesta stackoverflow.com/a/29511357/1535177 .
Eosis
7

Como lo mencionaron otros en los comentarios, una solución realmente simple a este problema es declarar la base de datos 'host' dentro de la configuración de la base de datos. Agregar esta respuesta solo para que quede un poco más claro para cualquiera que lea esto.

En una aplicación Ruby on Rails, por ejemplo, edite /config/database.yml:

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

Nota: la última línea agregada para especificar el host. Antes de actualizar a Yosemite, nunca necesité especificar el host de esta manera.

Espero que esto ayude a alguien.

Salud

David Battersby
fuente
Necesitaba configurar mi host en el directorio que encontré que contenía el .s.PGSQL.5432archivo.
Eosis
5

Verifique el estado de la base de datos:

service postgresql status

Si la base de datos no se está ejecutando, inicie la base de datos:

sudo service postgresql start
Sivakumar RJ
fuente
se quedó con el error anterior y lo resolvió iniciando el archivo db.
Sivakumar RJ
4

¿Puedes comprobar tu archivo postgresql.conf?

¿En qué puerto se está ejecutando su postgres?

Creo que no se está ejecutando en el puerto 5432, si no lo cambia a 5432

O en uso de terminal

psql -U  postgres -p YOUR_PORT_NUMBER database_name
Cazador
fuente
1
No puedo ejecutar el comando de terminal. Me sale el mismo error. Necesito ayuda sobre dónde puedo encontrar el archivo postgresql.conf. Solía ​​tener una carpeta / var / pgsql cuando ejecutaba Lion Server. Supongo que eso se ha ido ahora. Acabo de publicar mi salida para el comando ps grep. Encendí el servicio Wiki para ejecutar PostgreSQL. Me dijeron que podía usar los comandos sudo serveradmin sin activar ningún servicio de la aplicación del servidor, pero no funcionan. Estoy conectado como root en este momento, así que debería poder hacer cualquier cosa :) Revisé los puertos en Network Utility. 5432 no se utiliza.
Pamela Cook - LightBe Corp
2

Tuve este problema con Django.

Corríjalo estableciendo explícitamente su nombre de host en "localhost".

Ashwin Balamohan
fuente
2

hago en palabra haciendo esto:

dpkg-reconfigure locales

y elija sus lugares preferidos

pg_createcluster 9.5 main --start

(9.5 es mi versión de postgresql)

/etc/init.d/postgresql start

y luego la palabra!

sudo su - postgres
psql
mymusise
fuente
1
apt-get install postgres-xc-client
apt-get install postgres-xc
angela
fuente
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"?

Seguí recibiendo el error anterior y ninguna de las soluciones anteriores funcionó para mí. Finalmente, la siguiente solución resolvió mi problema en Mac OS X

Instalar postgres usando brew

brew install postgres

Instalar servicios de preparación

brew tap homebrew/services

Para iniciar postgres como servicio en segundo plano

brew services start postgresql

Para detener postgres manualmente

brew services stop postgresql

También podemos usar brew services para reiniciar Postgres

brew services restart postgresql
Sudharshan
fuente
1

Verifique que el servidor de Postgres se esté ejecutando con el siguiente código

sudo service postgresql status

si el servidor de Postgres está inactivo, escriba el siguiente comando.

sudo service postgresql start
wailinux
fuente
1

Recibí este error después de que mi computadora se congeló y reinició por sí sola. La solución para mí no se encontró en esta página, sino en otra pregunta SO muy calificada con el mismo error psql: no se pudo conectar al servidor: no existe ese archivo o directorio (Mac OS X) . La respuesta: simplemente elimine este archivo /usr/local/var/postgres/postmaster.pid, luego brew services restart postgresqlhizo el truco. Preste atención a la advertencia en la respuesta vinculada sobre matar procesos de postgres antes de hacer esto, de lo contrario, podría corromper su base de datos de forma permanente.

wetjosh
fuente
0

Los permisos de archivo son restrictivos en la base de datos de Postgres propiedad de Mac OS. Estos permisos se restablecen después de reiniciar o reiniciar Postgres: por ejemplo, serveradmin start postgres.

Por lo tanto, restablezca temporalmente los permisos o la propiedad:

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

El restablecimiento de permisos no es seguro, así que instale una versión de la base de datos de su propiedad como solución.

clewis
fuente
0

Me tomó un tiempo, pero finalmente pude hacer que esto funcionara después de seguir las sugerencias ofrecidas y realizar búsquedas web adicionales. Usé la información en el siguiente video de YouTube creado por Mactasia:

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

Cuando hice esto, vi el archivo con .lock como extensión. Sin embargo, todavía recibí el error cuando intenté iniciar Rails Server cuando reanudé el trabajo en mi aplicación Rails usando PostgreSQL. Esta vez obtuve un error de permiso denegado. Fue entonces cuando recordé que no solo tuve que cambiar listen_addresses en el plist, sino que también tuve que cambiar unit_socket_permissions a 0777. También inicié sesión como root para cambiar los permisos en la carpeta var / pgsql_socket donde podía acceder a él en el nivel de usuario. Postgres está funcionando bien ahora. Estoy en el proceso de recargar mis datos desde mi copia de seguridad SQL.

Lo que no entendí fue que cuando encendí el wiki, PostgreSQL supuestamente estaba funcionando cuando hice un sudo serveradmin fullstatus postgres pero todavía recibí el error. Oh bien.

Pamela Cook - LightBe Corp
fuente
0

Acabo de crear un nuevo clúster y eso funcionó para mí, estaba usando (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start
Bruno Filgueiras
fuente
0

Primero elimine el postgres instalado:

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

Luego instale 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

Luego instala Postgres

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

Para la aplicación RubyOnRails, agregue localhost si usa la versión personalizada de Postgresql

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