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 psql
manera no interactiva?
bash
postgresql
command-line
Alex N.
fuente
fuente
Respuestas:
De la documentación oficial :
...
fuente
chmod go-rwx .pgpass
Establezca 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
space
en 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=YourNewPassword
funcionó para mí sobre otras variaciones.export PGPASSWORD
suena 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=pass
Ejecutar comando:
C:\>psql -d database -U user
Listo
O en una linea,
Tenga en cuenta la falta de espacio antes de &&!
fuente
-w
también.PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"
trabajos.Esto se puede hacer creando un
.pgpass
archivo en el directorio de inicio del Usuario (Linux)..pgpass
formato de archivo:También puede usar comodines
*
en lugar de detalles.Digamos que quería ejecutar
tmp.sql
sin solicitar una contraseña.Con el siguiente código puedes en el archivo * .sh
fuente
Una alternativa al uso de la
PGPASSWORD
variable de entorno es usar laconninfo
cadena 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