Estoy tratando de automatizar el proceso de creación de la base de datos con un script de shell y una cosa me he topado con 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 de psqlmanera no interactiva?
bash
postgresql
command-line
Alex N.
fuente
fuente

Respuestas:
De la documentación oficial :
...
fuente
chmod go-rwx .pgpassEstablezca la variable de entorno PGPASSWORD dentro del script antes de llamar a psql
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.
Usar eso es un riesgo de seguridad porque la contraseña es visible en texto plano al mirar la línea de comandos de un proceso en ejecución, por ejemplo, usando
ps(Linux), ProcessExplorer (Windows) o herramientas similares, por otros usuarios.Consulte también esta pregunta sobre Administradores de bases de datos
fuente
spaceen la línea de comando antes del primer carácter y el comando no se almacenará en el historial de bash. Funciona para ubuntu / bash.docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'en una linea:
con comando un comando sql como
"select * from schema.table"o más legible:
fuente
PGPASSWORD='password' psql ....que también tiene el beneficio de que la variable no sea accesible después de que se haya ejecutado el comando.export PGPASSWORD=YourNewPasswordfuncionó para mí sobre otras variaciones.export PGPASSWORDsuena como una muy mala ideaTiendo a preferir pasar una URL a psql :
Esto me da la libertad de nombrar mis variables de entorno como desee y evita crear archivos innecesarios.
Esto requiere
libpq. La documentación se puede encontrar aquí .fuente
En Windows:
Asignar valor a PGPASSWORD:
C:\>set PGPASSWORD=passEjecutar comando:
C:\>psql -d database -U userListo
O en una linea,
Tenga en cuenta la falta de espacio antes de &&!
fuente
-wtambién.PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"trabajos.Esto se puede hacer creando un
.pgpassarchivo en el directorio de inicio del Usuario (Linux)..pgpassformato de archivo:También puede usar comodines
*en lugar de detalles.Digamos que quería ejecutar
tmp.sqlsin solicitar una contraseña.Con el siguiente código puedes en el archivo * .sh
fuente
Una alternativa al uso de la
PGPASSWORDvariable de entorno es usar laconninfocadena de acuerdo con la documentación :fuente
Contenido agregado de pg_env.sh a mi .bashrc:
con adición de (según la sugerencia del usuario 4653174)
fuente