bash - script - ¿Cómo puedo especificar una contraseña para psql de forma no interactiva?
psql tutorial (6)
Estoy tratando de automatizar el proceso de creación de la base de datos con un script de shell y una cosa he encontrado un obstáculo al pasar una contraseña a psql. Aquí hay un poco de código del script de shell:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
¿Cómo paso una contraseña a psql de forma no interactiva?
¡Gracias!
A partir de la documentación oficial :
También es conveniente tener un archivo ~ / .pgpass para evitar tener que ingresar contraseñas regularmente. Vea la Sección 30.13 para más información.
...
Este archivo debe contener líneas del siguiente formato:
hostname:port:database:username:password
Se utilizará el campo de contraseña de la primera línea que coincida con los parámetros de conexión actuales.
En Windows:
Asigne valor a PGPASSWORD:
C:/>set PGPASSWORD=pass
Ejecute el comando:
C:/>psql -d database -U user
Listo
O en una línea,
set PGPASSWORD=pass&& psql -d database -U user
Tenga en cuenta la falta de espacio antes de la &&!
Establezca la variable de entorno PGPASSWORD dentro de la secuencia de comandos antes de llamar a psql
PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName
Para referencia, consulte http://www.postgresql.org/docs/current/static/libpq-envars.html
Editar
Desde Postgres 9.2, también existe la opción de especificar una cadena de conexión o URI que puede contener el nombre de usuario y la contraseña.
El uso de este es un riesgo de seguridad porque la contraseña es visible en texto sin formato cuando se mira en la línea de comandos de un proceso en ejecución, por ejemplo, utilizando ps
(Linux), ProcessExplorer (Windows) o herramientas similares, por otros usuarios.
Véase también esta pregunta sobre Administradores de bases de datos.
Esto se puede hacer creando un archivo .pgpass
en el directorio de inicio del Usuario (Linux). .pgpass
formato de archivo:
<databaseip>:<port>:<databasename>:<dbusername>:<password>
También puedes usar comodín *
en lugar de detalles.
Digamos que quería ejecutar tmp.sql
sin tmp.sql
una contraseña.
Con el siguiente código puedes en el archivo * .sh
echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"
echo " ` psql -h 192.168.1.1 -p 5432 -U postgres postgres -f tmp.sql `
Tiendo a preferir pasar un url a psql:
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
Esto me da la libertad de nombrar mis variables de entorno como deseo y evita crear archivos innecesarios.
Esto requiere libpq
. La documentación se puede encontrar here
en una línea:
export PGPASSWORD=''password''; psql -h ''server name'' -U ''user name'' -d ''base name'' -c ''command''
con comando un comando sql como
"select * from schema.table"
o más legible:
export PGPASSWORD=''password'' psql -h ''server name'' -U ''user name'' -d ''base name'' / -c ''command'' (eg. "select * from schema.table")