How do I specify a password to psql non-interactively?
我正在尝试使用shell脚本自动化数据库创建过程,并且我已经通过将密码传递给psql而遇到了一个问题。
以下是shell脚本中的一些代码:
1 | psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL" |
如何以非交互方式将密码传递给psql?
谢谢!
在调用psql之前,在脚本中设置PGPASSWORD环境变量
1 | PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName |
供参考,请参阅http://www.postgresql.org/docs/current/static/libpq-envars.html
编辑
从Postgres 9.2开始,还可以选择指定可以包含用户名和密码的连接字符串或URI。
使用它是一种安全风险,因为在查看正在运行的进程的命令行时,密码以纯文本形式可见,例如其他用户使用
另请参阅有关数据库管理员的此问题
从官方文档:
It is also convenient to have a ~/.pgpass file to avoid regularly having to type in passwords. See Section 30.13 for more information.
...
This file should contain lines of the following format:
1 | hostname:port:database:username:password |
The password field from the first line that matches the current connection parameters will be used.
-
在一行:
1export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'使用命令执行
"select * from schema.table" 等sql命令 -
或更具可读性:
1
2
3export PGPASSWORD='password'
psql -h 'server name' -U 'user name' -d 'base name' \
-c 'command' (eg."select * from schema.table")
我更倾向于将URL传递给psql:
1 | psql"postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME" |
这使我可以自由地命名我的环境变量,并避免创建不必要的文件。
这需要
在Windows上:
为PGPASSWORD分配值:
运行命令:
准备
或者在一行中,
1 | set PGPASSWORD=pass&& psql -d database -U user |
请注意&& amp;之前缺少空间。 !
这可以通过在(Linux)用户的主目录中创建
1 | <databaseip>:<port>:<databasename>:<dbusername>:<password> |
您也可以使用通配符
假设我想在不提示输入密码的情况下运行
使用以下代码,您可以在* .sh文件中
1 2 3 4 | 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 ` |
在我的.bashrc中添加了pg_env.sh的内容:
1 2 3 4 5 6 7 8 9 10 11 12 | cat /opt/PostgreSQL/10/pg_env.sh #!/bin/sh # The script sets environment variables helpful for PostgreSQL export PATH=/opt/PostgreSQL/10/bin:$PATH export PGDATA=/opt/PostgreSQL/10/data export PGDATABASE=postgres export PGUSER=postgres export PGPORT=5433 export PGLOCALEDIR=/opt/PostgreSQL/10/share/locale export MANPATH=$MANPATH:/opt/PostgreSQL/10/share/man |
添加(根据user4653174建议)
1 | export PGPASSWORD='password' |