2011-09-10 7 views
6

psql mydb rendimientos:postgresql: ¿Por qué tengo que especificar -h localhost al ejecutar psql?

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

psql -h localhost mydb funciona bien. pg_hba.conf se parece a:

local all    all          trust 
host all    all    127.0.0.1/32   trust 
host all    all    ::1/128     trust 

¿Qué pasa?

Respuesta

2

Probablemente psql y el servidor usan una ubicación diferente para el socket del dominio Unix. (/ var/pgsql_socket/es una ubicación extraña) Esto puede suceder si está mezclando binarios de diferentes paquetes. Trate de localizar el casquillo (/ tmp/es un buen lugar para empezar) Puede forzar psql utilizar un directorio diferente por el mal uso de la opción -h:

psql -h /tmp/ 
+0

+1 para el conmutador '-h', que también funciona para las conexiones locales (barra inclinada al principio). La ruta del socket del dominio Unix está determinada por la propiedad ['unix_socket_directory'] (http://www.postgresql.org/docs/current/static/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORY) en' postgresql .conf'. –

+0

La propiedad 'unix_socket_directory' puede estar vacía (nunca la he visto establecer), en cuyo caso, presumiblemente, es/tmp /. – wildplasser

+0

Gracias por el consejo: estoy usando los paquetes OS X estándar de postgres, lo que explica la configuración del socket del dominio Unix. – Wells

2

Esto me sucedió en OS X, y el El problema fue que /usr/bin/psql es lo que estaba usando, pero el administrador de correos se estaba ejecutando desde /Library/PostgreSQL/9.0. Usar /Library/PostgreSQL/9.0/bin/psql (metiéndolo en mi PATH antes que nada) solucionó el problema.

1

Como otras respuestas dirigidas a otras alternativas, creo que podría proporcionar algo sobre Mac OS X Server en Lion. Me encuentro con un problema muy similar: en mi caso, incluso -h localhost no funcionaba, ya que la conexión de red estaba deshabilitada en PostregSQL, que por cierto, en muchos casos, es una muy buena idea. Lo que ocurre con Mac OS X Server es que lanza el servidor PostgreSQL a través del launchd.

Algunos consejos a medida que avanza en torno a:

  • serveradmin servicio: postgres
  • launchd fichero de configuración: /System/Library/LaunchDaemons/org.postgresql.postgres.plist
  • carpeta de la base: /var/pgsql
  • carpeta de socket: /var/pgsql_socket

Eso estafa El archivo de figuración anula varias directivas de configuración que se pueden encontrar en postgresql.conf en la carpeta de la base de datos. Especialmente estos dos:

  • unix_socket_group
  • unix_socket_permissions

Puede encontrar que _postgres cuenta se utiliza para ejecutar el servidor y todo también es accesible si el usuario activa es miembro del grupo _postgres.

Mediante la ejecución de dscl . -read /Groups/_postgres GroupMembership se puede ver que, por defecto ese grupo tiene estos miembros: _devicemgr_calendar_teamsserver_www

supongo que tienes dos opciones. Añádese al grupo _postgres o cambie el archivo de configuración launchd. Lo último es simplemente edición de texto sin formato ...Pero ten cuidado con la seguridad, porque de esta manera estarás abriendo Servidor según lo que cumpla con los criterios que cambies (mira el último párrafo).

El primero se puede hacer a través de Server.app o mediante la utilidad de línea de comandos dscl. La primera opción probablemente no necesita agregar nada. Solo asegúrese de que pueda ver las Cuentas del sistema (Ver -> Ocultar/Mostrar cuentas del sistema). Soy una especie de adicto a la CLI lo que este debe agregar su usuario _postgres grupo:

sudo dscl . -append /Groups/_postgres GroupMembership $USER 

supuesto, usted debe tener cuidado con lo ejecuta bajo su cuenta a continuación, debido a que está dando acceso a su base de datos del servidor de Mac OS X back-end. Por lo tanto, o bien asegure su cuenta _postgres o cree un usuario diferente para manipular su base de datos o no guarde nada privado allí.

8

Me sucedió exactamente lo mismo, presumiblemente debido a la versión conflictiva de psql (una de Lion, una de homebrew). Si bien aún no he podido averiguar cómo hacer que psql use el directorio/tmp socket, tengo un problema.

poner lo siguiente en su .bashrc (o .zshrc, etc):

export PGHOST=/tmp 

Esto ajusta la correcta "host" de vuelta al directorio toma correcta, sin tener que suministrar la bandera -h

Cuestiones relacionadas