tutorial script example commands bash postgresql command-line

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:

  1. Asigne valor a PGPASSWORD: C:/>set PGPASSWORD=pass

  2. 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")