bash - example - postgresql:.pgpass no funciona
pgpass windows (5)
He creado un archivo .pgpass
en mi directorio de inicio que tiene este aspecto
localhost:5432:somedb:someuser:somepass
Estoy usando un script de shell que crea un directorio y coloca un pg_dump de somedb
allí:
mkdir directory
pg_dump somedb > directory/somefile.dump
Todavía pide la contraseña.
¿Dónde está el error aquí?
¿Intentaste especificar el host y el usuario?
pg_dump -U someuser -h localhost somedb > directory/somefile.dump
1) Crear un archivo .pgpass con contenido
anfitrión: 5432: somedb: someuser: somepass
2) establecer los permisos utilizando el comando
sudo chmod 600 .pgpass
3) Establezca el propietario del archivo como el mismo usuario con el que inició sesión:
sudo chown login_username: login_username .pgpass
4) Establecer la variable de entorno PGPASSFILE:
exportar PGPASSFILE = ''/ home / user / .pgpass''
Ahora compruebe conectándose a la base de datos:
psql -h host -U someuser somedb
No solicitará la contraseña y se conectará a postgresql.
Aunque la pregunta ya ha sido respondida y aceptada, también puede ocurrir que los permisos en el archivo .pgpass no estén configurados correctamente. Tiene que tener prohibido el acceso al mundo y al grupo:
/bin/chmod 0600 ~/.pgpass
Compruebe el propietario del archivo .pgpass. Solo perdí media hora para descubrir que había creado mi archivo .pgpass con sudo. El comando para mi usuario y ubicación era chown postgres:postgres /var/lib/pgsql/.pgpass
.
psql
( startup.c ) llama a PQconnectdbParams
( fe-connect.c ), y luego se llama a passwordFromFile
. Aquí hay una lista de verificación para asegurarse de que se utilizará el archivo pgpass:
- Asegúrese de que las banderas
--password
/-W
ypassword=
en la cadena de conexión estén desactivadas. De lo contrario, el archivo pgpass no se utilizará. - Asegúrese de que la variable de entorno
PGPASSWORD
esté establecida (echo $PGPASSWORD
). De lo contrario, el archivo pgpass no se utilizará. - Asegúrese de que el archivo pgpass esté en la ubicación correcta (
$PGPASSFILE
o predeterminado~/.pgpass
o%APPDATA%/postgresql/pgpass.conf
) - Asegúrese de que el archivo de acceso no sea legible, grabable o ejecutable por grupo u otro (por ejemplo,
chmod 600 ~/.pgpass
); De lo contrario,psql
imprimirá una advertencia. - Asegúrese de que el archivo de acceso sea un archivo (no un enlace simbólico); De lo contrario,
psql
imprimirá una advertencia. - Asegúrese de que el archivo de acceso sea legible por el usuario de
psql
(por ejemplo,cat ~/.pgpass
); De lo contrario,psql
lo ignorará sin previo aviso. Asegúrese de que sea propiedad del usuario y de que todos los directorios de sus antepasados sean ejecutables por el usuario. - Asegúrese de que el nombre de host, el puerto, el dbname, el nombre de usuario de la línea en el archivo pgpass coincidan con el servidor o estén
*
. La "pwhost" del servidor que está marcada es el nombre delhost
si no está vacío, o la dirección IP dehostaddr
. De lo contrario, el archivo será ignorado sin previo aviso.
Desafortunadamente, no hay registro dentro de estos archivos, por lo que si esto no ayuda, entonces es posible que necesite compilar psql
y libpq
usted mismo y ejecutarlo en un depurador.