No se puede conectar a Postgres en Vagrant Box - ¿Conexión rechazada?


10

En primer lugar, soy nuevo en Vagrant y Postgres.

Creé mi instancia de Vagrant usando http://files.vagrantup.com/lucid32.box sin ningún problema. Soy capaz de correr vagrant upy vagrant sshsin problemas.

Seguí las instrucciones con una pequeña alteración, instalé el paquete "postgresql-8.4-postgis" en lugar de "postgresql postgresql-contrib".

Comencé el servidor usando:

postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start

Mientras estoy conectado a la instancia vagabunda, puedo usar psqlpara conectarme a la instancia sin problemas.

En mi Vagrantfile ya había agregado:

config.vm.forward_port 5432, 5432

pero cuando intento ejecutar psql desde el host local me sale:

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Estoy seguro de que me falta algo simple. ¿Algunas ideas?

Actualizar:

Encontré una referencia a un problema como este y el artículo sugirió usar:

psql -U postgres -h localhost

con eso me sale:

psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

Respuestas:


5

Las instrucciones de la publicación de blog que mencionó no son correctas para ubuntu: usan piezas de la instalación de un servidor autocompilado que no se mezclan bien con una versión empaquetada.

No se debe crear / usr / local / pgsql / data y ejecutar initdb en ese directorio, porque el paquete ubuntu usa /var/lib/postgresql/<pg-version-number>/<cluster-name>y se ejecuta initdben nombre del usuario.

El error que menciona "/tmp/.s.PGSQL.5432" muestra que la ubicación esperada para este archivo es incorrecta (para ubuntu). Debería estar adentro /var/run/postgresql. Esto probablemente se deba a ejecutar initdb manualmente con parámetros que son incompatibles con ubuntu.

Los archivos postgresql.conf y pg_hba.conf para editar para habilitar conexiones no locales deben estar dentro /etc/postgresql/8.4/mainy no / usr / local / pgsql / data.

El /etc/init.d/postgresql-8.4debe ser iniciado por root (como todo lo demás en /etc/init.d), no por el usuario de postgres.

PGDATA no debe configurarse manualmente, porque de nuevo realmente interfiere en el funcionamiento de los paquetes ubuntu postgres.

Mi respuesta sería purgar y reinstalar el paquete postgresql-8.4 sin seguir ninguna de las instrucciones de la publicación del blog. postgresql-8.4-postgis depende de postgresql-8.4, por lo que también se eliminará. También asegúrese de deshacer la configuración de PGDATA en /etc/bash.bashrc.


Estoy rehaciendo la instalación ahora, pero noté en su respuesta que sugirió que la ruta era incorrecta para que Ubuntu buscara el archivo en el lugar incorrecto. ¿Podría deberse a que el cliente se ejecuta en OSX mientras el servidor es una caja de ubuntu?

Así que hice la reinstalación y obtuve exactamente el mismo error. Miré un poco más y descubrí que no tenía puertos abiertos en iptables. Después de seguir las instrucciones aquí: cyberciti.biz/tips/howto-iptables-postgresql-open-port.html Puedo conectarme.

No puedo decir con certeza si la reinstalación fue parte de la solución, pero definitivamente fue útil. Así que te doy la victoria

Cuando el cliente y los servidores están en diferentes hosts, psql debe invocarse psql -h <server> [optional other arguments]donde <server> es el nombre de host o la dirección IP (y no es localhost) del servidor (cuadro ubuntu en este caso). En la pregunta no parece que lo estuvieras llamando así, así que asumí que todos los comandos se iniciaron en el servidor. De todos modos, estoy realmente seguro de que la reinstalación fue una medida sensata, incluso si la conexión podría haberse establecido.

Lo llamo así: psql -U postgres -h localhost ya que tengo una configuración de reenvío de puerto vagabundo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.