He logrado descifrar mi entorno de desarrollo local.
Todas mis aplicaciones locales de Rails ahora están dando el error:
PGError
could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
No tengo idea de qué causó esto.
Mientras buscaba una solución, actualicé todas las gemas incluidas, las gemas del sistema actualizadas, los MacPorts actualizados. Sin alegría.
Otros han informado de este problema al actualizar OSX Leopard a Lion, debido a la confusión sobre qué versión de Postgres debe usarse (es decir, la versión OSX o la versión MacPorts). He estado ejecutando Lion durante varios meses, por lo que parece extraño que esto ocurra ahora.
Soy reacio a perder el tiempo sin entender primero cuál es el problema. ¿Cómo puedo depurar esto metódicamente?
¿Cómo puedo determinar cuántas versiones de PostgreSQL hay en mi sistema, a cuál se accede y dónde se encuentra? ¿Cómo soluciono esto si se usa el PostgreSQL incorrecto?
Perdón por las preguntas novatas. ¡Todavía estoy aprendiendo cómo funciona esto! Gracias por cualquier puntero.
EDITAR
Algunas actualizaciones basadas en sugerencias y comentarios a continuación.
Traté de ejecutar pg_lsclusters
que devolvió un command not found
error.
Luego intenté localizar mi archivo pg_hba.conf y encontré estos tres archivos de muestra:
/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample
¿Entonces supongo que hay instaladas 3 versiones de PSQL? Macports, OSX predeterminado y ???.
Luego busqué el script de inicio de launchctl ps -ef | grep postgres
que me devolvió
0 56 1 0 11:41AM ?? 0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
500 372 1 0 11:42AM ?? 0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb
500 766 372 0 11:43AM ?? 0:00.37 postgres: writer process
500 767 372 0 11:43AM ?? 0:00.24 postgres: wal writer process
500 768 372 0 11:43AM ?? 0:00.16 postgres: autovacuum launcher process
500 769 372 0 11:43AM ?? 0:00.08 postgres: stats collector process
501 4497 1016 0 12:36PM ttys000 0:00.00 grep postgres
He publicado el contenido de postgresql84-server.wrapper en http://pastebin.com/Gj5TpP62 .
Traté de correr port load postgresql184-server
pero recibí un error Error: Port postgresql184-server not found
.
Todavía estoy muy confundido sobre cómo solucionar esto, y aprecio cualquier puntero "para tontos".
¡Gracias!
EDIT2
Este problema comenzó después de que tuve algunos problemas con Daemondo. Mis aplicaciones locales de Rails se estaban bloqueando con un error de aplicación en la línea de "no se puede encontrar la joya daemondo". Luego revisé una serie de actualizaciones de paquetes, actualizaciones de gemas, actualizaciones de puertos y actualizaciones de preparación para tratar de encontrar el problema.
¿Podría este error ser un problema con Daemondo?
fuente
pg_lsclusters
y supg_hba.conf
archivo.Respuestas:
Esto realmente parece un error de permisos de archivo. Los sockets de dominio Unix son archivos y tienen permisos de usuario como cualquier otro. Parece que el usuario de OSX que intenta acceder a la base de datos no tiene permisos de archivo para acceder al archivo socket. Para confirmar esto, he realizado algunas pruebas en Ubuntu y psql para intentar generar el mismo error (incluido a continuación).
Debe verificar los permisos en el archivo socket y sus directorios
/var
y/var/pgsql_socket
. Su aplicación Rails (usuario de OSX) debe tener permisos de ejecución (x) en estos directorios (preferiblemente otorgue permisos a todos) y el socket debe tener permisos completos (wrx). Puede usarls -lAd <file>
para verificar estos, y si alguno de ellos es un enlace simbólico, debe verificar el archivo o dir al que apunta el enlace.Puede cambiar los permisos en el directorio para usted, pero postgres configura el socket
postgresql.conf
. Esto se puede encontrar en el mismo directorio quepg_hba.conf
(tendrá que averiguar cuál). Una vez que haya establecido los permisos, deberá reiniciar postgresql.EDITAR:
Hice una búsqueda rápida en Google que quizás desee consultar para ver si es relevante. Esto bien podría resultar en cualquier intento de que
find
su archivo de configuración falle.http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html
Error de mensajes:
Usuario no encontrado en pg_hba.conf
El usuario falló la autenticación de contraseña:
Falta un archivo de socket Unix:
El socket Unix existe, pero el servidor no lo escucha.
Permisos de archivos incorrectos en el archivo de socket Unix :
fuente
PS
devuelve procesos postgres para que se esté ejecutando. ¡Confuso!Mi intuición es que esto es (nuevamente) una cosa mac / OSX: el front-end y el back-end asumen una ubicación diferente para el socket de dominio unix (que funciona como un punto de encuentro ).
Lista de Verificación:
ps aux | grep postgres | grep -v grep
debería hacer el trucofind / -name .s.PGSQL.5432 -ls
(el zócalo solía estar en / tmp; podría comenzar a buscar allí)Si postgres se está ejecutando y el socket realmente existe, puede usar:
psql -h /the/directory/where/the/socket/was/found mydbname
(que intenta conectarse al socket de dominio unix)
; ahora debería obtener el indicador psql: intente
\d
y luego\q
salga. También puedes probar:psql -h localhost mydbname
.(que intenta conectarse a localhost (127.0.0.1)
Si estos intentos fallan debido a una autorización insuficiente, puede alterar pg_hba.conf (y SIGHUP o reiniciar) En este caso: también verifique los registros.
Una pregunta similar: no se puede iniciar Postgres
Nota: Si puede acceder al indicador psql, la solución rápida a este problema es simplemente cambiar su
config/database.yml
, agregue:host: localhost
o podrías intentar agregar:
host: /the/directory/where/the/socket/was/found
En mi caso,
host: /tmp
fuente
Intente desinstalar el pg gem (
gem uninstall pg
) y luego reinstalar; si usa bundler, entoncesbundle install
, de lo contrariogem install pg
. Además, asegúrese de que la ruta elija la versión correcta: Lion tiene una versión de posgresql (las versiones anteriores no) y puede estar en la ruta antes de su versión instalada localmente (por ejemplo, MacPorts, homebrew).En mi caso: instalación homebrew de postgresql, postgresql actualizado, rails, etc. y luego recibí este error. Desinstalar y reinstalar la gema pg lo hizo por mí.
fuente
La ubicación del archivo de socket se cuece en la gema en tiempo de compilación. Por lo tanto, necesita reconstruir su gema pg.
Esto debería resolver ese problema en particular.
fuente
Si obtiene un error similar:
Esto podría hacer el truco (lo hizo para mí):
El directorio especificado debe ser diferente si no está utilizando OSX / Brew.
Nota: Este no es el mensaje de error exacto visto anteriormente, pero este hilo es el primer resultado para ese mensaje de error.
fuente
rm -fr /usr/local/var/postgres
antes de correrinitb
rm -rf /usr/local/var/postgres
entoncesinitdb /usr/local/var/postgres -E utf8
. Pero asegúrese de que postgres no se esté ejecutando cuando haga esto; de lo contrario, el directorio se volverá a crear casi de inmediato.lo que resolvió este error para mí fue eliminar un archivo llamado postmaster.pid en el directorio postgres. consulte mi pregunta / respuesta utilizando el siguiente enlace para obtener instrucciones paso a paso. mi problema no estaba relacionado con los permisos de archivo:
psql: no se pudo conectar al servidor: no existe tal archivo o directorio (Mac OS X)
Sin embargo, las personas que respondieron a esta pregunta dejaron mucho juego, ¡gracias por eso! voté todo lo que pude
fuente
Así es como resolví ese mensaje de error, basado en parte en la respuesta de wildplasser.
Entonces, está mi socket o lo que sea, pero el cliente lo busca en:
Entonces, simplemente haga un enlace simbólico a
/tmp/.s.PGSQL.5432
:Espero que esto ayude a cualquiera. Parece un poco mal, pero bueno, ¡funciona!
fuente
sudo mkdir /var/run/postgresql
carpeta (en mi caso, la identificación no existía y el instalador no la creó para la página 9.3.X).Comencé a recibir esto después de actualizar a un nuevo postgres; no me di cuenta de que tenía archivos de datos retenidos.
Primero intenté iniciar el servidor postgres:
que es como vi este error
Entonces encontré esta respuesta en SO, relacionada con un error de incompatibilidad: /server/342626/how-do-i-upgrade-postgresl-database-incompatibility-error
Esto es lo que lo arregló
fuente
Solo confirmando que tuve un problema similar en PSQL y Django,
Parecía porque mi servidor psql no se cerró correctamente y el archivo postmaster.pid todavía estaba presente (debería eliminarse en el apagado correcto automáticamente) en mi carpeta de postgres.
Borrado esto y todo bien
fuente
psql: could not connect to server: No such file or directory.
Eliminarpostmaster.pid
de/usr/local/var/postgres
hizo que todo volviera a funcionar.Estaba recibiendo este mismo error (resulta que fue un error
postmaster.pid
. Así es como conseguí que Postgres volviera a funcionar ( crédito a Ricardo Burillo por la solución ):fuente
pg_resetxlog
archivo de bloqueo devuelto "postmaster.pid" existe.Tuve un problema similar al intentar usar postgresql con rieles. Actualizar mi Gemfile para usar una nueva versión de gem pg solucionó este problema por mí. (Gema pg versión 0.16.0 funciona). En el uso de Gemfile:
luego ejecuta lo siguiente para actualizar la gema
fuente
Leí muchos temas sobre este error y la solución para mí fue simplemente reiniciar los postgres con:
Lo cual no se menciona aquí.
fuente
Estoy buscando la solución por un tiempo. Entonces, este también solucionó el problema para mí (reiniciar db):
Yo uso OS X 10.11.3 con brew.
fuente
Esto me sucedió hoy después de que se agotó la batería de mi Macbook. Creo que esto puede ser causado por un apagado incorrecto. Todo lo que tienes que hacer en casos como el mío es eliminar postmaster.pid
Navega a la carpeta
Verifique si postmaster.pid está presente
Eliminar postmaster.pid
fuente
En mi caso, ninguna de las soluciones anteriores era buena. En lugar de usar socket, puede usar el número TCP
host
+port
en el archivo de configuración de Rails. Entonces, en eldatabase.yml
archivo, solo agregue dos líneas como aquí:Esto resolvió mi problema :)
Antes de usar esta solución:
Pero después de cada reinicio
/tmp/.s.PGSQL.5432
se eliminó y tuve que repetir estos comandos. La solución funciona, pero es horrible, así que mejor simplemente modifique el archivo de configuración de la base de datos Rails :)fuente
Recibí este error cuando estaba configurando Posgtres con Django, estoy usando Back Track y viene con Postgres instalado. Supongo que la configuración es el problema. Lo arreglé quitándolo por completo y luego reinstalando así.
Ahora ejecuta:
para eliminar todo PostgreSQL de su sistema. Simplemente purgar el paquete postgres no es suficiente ya que es solo un metapaquete vacío.
Una vez que se hayan eliminado todos los paquetes de PostgreSQL, ejecute:
Ahora debería poder:
fuente
MacOSX aquí. Tuve el mismo problema después de actualizar mi instalación postresql de una versión anterior a 9.1 a 9.1.2 usando homebrew. (Por cierto, recuerde volcar las bases de datos antes de su actualización con pg_dump, las bases de datos anteriores a la 9.1 son incompatibles). Mismo problema, mismos mensajes de error.
Desinstalar la gema PG me ayudó. De hecho, tuve que bailar un poco para descubrir el problema. Primero hice una desinstalación global de gemas, limpiando la cubierta de todas las gemas antiguas (había algunas). Luego eliminé pg de mi Gemfile, volví a agrupar, restauré la referencia de pg y recuperé una vez más.
Después de eso, funcionó a las mil maravillas.
fuente
Hola mundo :)
La mejor pero extraña forma para mí era hacer lo siguiente.
1) Descargue postgres93.app u otra versión. Agregue esta aplicación a la carpeta / Aplicaciones /.
2) Agregue una fila (comando) en el archivo
Es un CAMINO a.bash_profile
(que está en mi directorio de inicio):psql
partir dePostgres93.app
. La fila (comando) se ejecuta cada vez que se inicia la consola.3) Ejecutar
Postgres93.app
desde la/Applications/
carpeta. Inicia un servidor local (el puerto es "5432" y el host es "localhost").4) ¡ Después de todas estas manipulaciones me alegré de ejecutar
$ createuser -SRDP user_name
y otros comandos y ver que funcionó!Postgres93.app
puede ejecutarse cada vez que se inicia su sistema.5) Además, si desea ver sus bases de datos gráficamente, debe instalar
PG Commander.app
. Es una buena manera de ver su base de datos postgres como bonitas tablas de datosPor supuesto, es útil solo para el servidor local. Me alegrará si estas instrucciones ayudan a otros que se han enfrentado a este problema.
fuente
Tuve este problema que me atormentaba, y después de una investigación adicional (en ejecución
rake db:setup
), vi que rails intentaba conectarse a una instancia de postgres utilizada anteriormente, una que estaba almacenada en variables env como DATABASE_URL.La solución:
unset DATABASE_URL
fuente: https://stackoverflow.com/a/17420624/2577622
fuente
Intenté la mayoría de las soluciones a este problema, pero no pude conseguir ninguna.
Ejecuté lo
lsof -P | grep ':5432' | awk '{print $2}'
que mostró el PID del proceso en ejecución. Sin embargo no pude matarlo conkill -9 <pid>
.Cuando ejecuté
pkill postgresql
el proceso finalmente se detuvo. Espero que esto ayude.fuente
En OS X con Homebrew:
fuente