script run postgres password from databases create database postgresql psql postgresql-9.0

database - run - Postgresql: Ejecución de scripts psql con contraseña



run postgresql script from terminal (13)

¿Cómo puedo llamar a psql para que no pida una contraseña ?

Esto es lo que tengo:

psql -Umyuser < myscript.sql

Sin embargo, no pude encontrar el argumento que pasa la contraseña, por lo que psql siempre lo solicita.


A partir de la respuesta de mightybyte para aquellos que no se sienten cómodos con los scripts de shell * nix , aquí hay un script de trabajo:

#!/bin/sh PGPASSFILE=/tmp/pgpasswd$$ echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE chmod 600 $PGPASSFILE export PGPASSFILE psql mydb rm $PGPASSFILE

El signo de dólar doble ( $$ ) en /tmp/pgpasswd$$ en la línea 2 agrega el número de ID del proceso al nombre del archivo, de modo que este script se puede ejecutar más de una vez, incluso simultáneamente, sin efectos secundarios.

Tenga en cuenta el uso del comando chmod en la línea 4: al igual que el error " no es un archivo sin formato " que describe mayybyte , también hay un error de " permisos " si no se hace.

En la línea 6, no tendrá que usar el indicador -h myserver , -p myport o -U jdoe si usa los valores predeterminados ( localhost : 5432 ) y solo tiene un usuario de base de datos. Para varios usuarios, (pero la conexión predeterminada) cambia esa línea a

psql mydb jdoe

No te olvides de hacer el script ejecutable con

chmod +x runpsql ( o como se llame al archivo de script )


Dadas las preocupaciones de seguridad sobre el uso de la variable de entorno PGPASSWORD, creo que la mejor solución general es la siguiente:

  1. Escriba su propio archivo pgpass temporal con la contraseña que desea usar.
  2. Use la variable de entorno PGPASSFILE para decirle a psql que use ese archivo.
  3. Eliminar el archivo pgpass temporal

Hay un par de puntos de nota aquí. El paso 1 está ahí para evitar que el archivo ~ / .pgpass del usuario pueda existir. También debe asegurarse de que el archivo tenga permisos 0600 o menos.

Algunos han sugerido aprovechar bash para atajar esto de la siguiente manera:

PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb

Esto utiliza la sintaxis <() para evitar la necesidad de escribir los datos en un archivo real. Pero no funciona porque psql comprueba qué archivo se está utilizando y producirá un error como este:

WARNING: password file "/dev/fd/63" is not a plain file



Esta podría ser una pregunta antigua, pero hay un método alternativo que puede usar que nadie ha mencionado. Es posible especificar la contraseña directamente en la conexión URI. La documentación se puede encontrar here , alternativamente here .

Puede proporcionar su nombre de usuario y contraseña directamente en la conexión URI proporcionada a psql :

# postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...] psql postgresql://username:password@localhost:5433/mydb


Hay varias formas de autenticarse en PostgreSQL. Es posible que desee investigar alternativas a la autenticación de contraseña en https://www.postgresql.org/docs/current/static/client-authentication.html .

Para responder a su pregunta, hay algunas maneras de proporcionar una contraseña para la autenticación basada en contraseña. La forma obvia es a través de la solicitud de contraseña. En lugar de eso, puede proporcionar la contraseña en un archivo pgpass o a través de la variable de entorno PGPASSWORD . Vea estos:

No hay ninguna opción para proporcionar la contraseña como un argumento de línea de comando porque esa información a menudo está disponible para todos los usuarios y, por lo tanto, es insegura. Sin embargo, en entornos Linux / Unix puede proporcionar una variable de entorno para un solo comando como este:

PGPASSWORD=yourpass psql ...


Me parece que psql muestra la solicitud de contraseña incluso cuando define la variable PGPASSWORD, pero puede especificar la opción -w para que psql omita la solicitud de contraseña.


Puede agregar esta línea de comando al comienzo de su script:

set PGPASSWORD=[your password]



Se puede hacer simplemente usando PGPASSWORD. Estoy usando psql 9.5.10. En tu caso la solución sería

PGPASSWORD=password psql -U myuser < myscript.sql


Si pretende tener varias conexiones de hosts / base de datos, el archivo ~ / .pgpass es el camino a seguir.

Pasos:

  1. Crea el archivo ~ / .pgpass. Ingrese su información en el siguiente formato nombre de host: puerto: base de datos: nombre de usuario: contraseña
  2. No agregue comillas de cadena alrededor de sus valores de campo. También puede utilizar * como comodín para los campos de su puerto / base de datos.
  3. Cree un alias en su perfil de bash que ejecute su comando psql por usted. Por ejemplo: alias postygresy=''psql --host hostname database_name -U username'' Los valores deben coincidir con aquellos que ingresó en el archivo ~ / .pgpass.
  4. Fuente de su perfil de bash.
  5. Escriba su alias desde la línea de comandos.

Tenga en cuenta que si tiene una variable de exportación PGPASSWORD = '''' establecida, tendrá prioridad sobre el archivo. También es aconsejable cambiar los permisos de su archivo para que el contenido esté oculto de otros usuarios. Esto se puede lograr con chmod 600 ~/.pgpass


Si tiene problemas en ventanas como yo (estoy usando Windows 7 de 64 bits) y set PGPASSWORD=[Password] no funcionó.

Entonces, como dijo Kavaklioglu en uno de los comentarios,

export PGPASSWORD=[password]

Necesitará guardar esto en la parte superior del archivo, o antes de cualquier uso, para que esté configurado antes de ser llamado.

Ciertamente funciona en windows :)


Utilice -w en el comando: psql -h localhost -p 5432 -U usuario -w


PGPASSWORD=[your password] psql -Umyuser < myscript.sql