2010-12-17 22 views
5

DB: Postgres 9.0 Cliente: Windows 7 Servidor Windows 2008 de 64 bits,ventanas Postgres pgpass - no trabajan

Estoy intentando conectarse de forma remota a una instancia de postgres con el propósito de realizar una pg_dump a mi máquina local.

Todo funciona desde la máquina de mi cliente, excepto que necesito proporcionar una contraseña en el indicador de contraseña, y en última instancia, me gustaría combinarlo con un script.

He seguido las instrucciones aquí:

http://www.postgresql.org/docs/current/static/libpq-pgpass.html

pero no funciona.

En resumen, he creado un archivo en el servidor: C:/Users/postgres/AppData/postgresql/pgpass.conf, donde postgresql es el usuario de db.

el archivo tiene una línea con los siguientes datos:

\*:5432:\*postgres:[mypassword] 

También he intentado reemplazar cada * con [localhost|myip] y [mydatabasename] respectivamente.

de mi máquina cliente, conectarse a través de:

pg_dump -h <myip> -U postgres -w [mydbname] > [mylocaldumpfile] 

estoy presumiendo que necesito proporcionar el interruptor -w con el fin de hacer caso omiso de solicitud de contraseña, en cuyo punto se debe buscar en el directorio de datos de programa de el servidor.

Simplemente vuelve con:

conexión con la base de datos ha fallado: fe_sendauth: sin contraseña suministrada.

Cualquier apreciación es apreciada.

Como una solución de hackeo, si hubiera una manera en que pudiera indicar al archivo de proceso por lotes de Windows en mi máquina cliente que inyectara la contraseña en el indicador de postgres, eso funcionaría también.

Gracias.

+2

'-h' es para que el host se conecte, el tuyo está vacío. Los primeros cuatro campos en el archivo 'pgpass' deben ser valores literales o *, el tuyo es una mezcla. El archivo 'pgpass' debe residir en la máquina del cliente en la carpeta' AppData' del usuario que emite el comando 'pg_dump' - el tuyo está en el servidor. –

+0

Empty -h es un error tipográfico. He intentado todo '*', no '*' y todas las combinaciones intermedias. También probé con un archivo AppData local, pero el mismo problema. – Scott

+0

¿Cuáles son los permisos en el archivo .pgpass? Necesitan ser leídos por el usuario solamente. –

Respuesta

4

He resuelto un problema similar (solo en Linux) para usar la dirección IP en pgpass y psql.

.pgpass

127.0.0.1:5432:db:dbuser:123 

psql params

psql -d db -U dbuser -h 127.0.0.1 -w 

pg_hba conf con la configuración predeterminada:

# IPv4 local connections: 
84 host all   all   127.0.0.1/32   md5 
+0

Me pasó exactamente lo mismo con 9.3 en Windows. Cambiar el host a 127.0.0.1 lo solucionó. – user1062589

3

Funciona para mí:

Uso de línea de comandos

cd %appdata% 
mkdir postgresql 
cd postgresql 
notepad pgpass.conf 

dentro pgpass.conf pegar su cadena de conexión (*:5432:*postgres:[mypassword]) y guardar el archivo. Para conectarse a uso postgres:

psql/pg_dump -U <username> -h <host> -w <other params you want to use> 
0

Se puede usar pgAdmin III para almacenar la contraseña (en propiedades del servidor). Esa operación crea automáticamente un archivo pgpass.conf correcto. A continuación, puede programar una tarea para ejecutar un archivo por lotes simple que se leería:

"C:\path\to\pg_dump.exe" -U <user> -w <database> > C:\path\to\database.backup

0

que he tenido un problema similar que no he podido resolver - no podía conseguir la escritura para reconocer el archivo pgpass.conf. Sin embargo, utilicé una solución alternativa para configurar la variable de entorno PGPASSWORD en el archivo por lotes que estaba usando (PostgreSQL 9.6).

Dentro de un archivo por lotes:

SET PGPASSWORD=<<password>> pg_dump.exe -h <<host>> -p <<port>> -U <<user>> -Fc -b -v -f <<output file path>> <<database>>

2

He conseguido que trabajar con lo siguiente:

pgpass.conf:

127.0.0.1:5432:*:username:password 

Sin embargo, he aquí que se almacena :

C:\Users\<user>\AppData\Roaming\postgresql 

Por alguna razón, en una iteración previa de Postgres, la base de datos había generado el archivo pgpass y lo había almacenado allí. Me encontré con el mismo problema que estaba teniendo, lo moví a ese directorio y funcionó. Aunque no estoy seguro de por qué.

Entonces, todo lo que necesita hacer es:

pg_dump -h myip mydb > mylocaldumpfile 

... asegurando que myip y la ip en pgpass.conf son idénticos. Si no lo están, le pedirá una contraseña.

Cuestiones relacionadas