方法一:设置环境变量 PGPASSWORD
PGPASSWORD 是 PostgreSQL 系统环境变量,连接远端数据库时,将优先使用这个密码。变量是临时的,在关闭 shell 时失效。具体步骤是:先设置环境变量,备份,再删除环境变量。
export PGPASSWORD="密码"
pg_dump -h 127.0.0.1 -p 5432 -U postgres dbname > /home/2021db.bak
export -n PGPASSWORD="密码"
备注:最后要删除环境变量,保证安全性。
方法二:设置 .pgpass 密码文件
通过在当前用户目录下创建隐藏文件 .pgpass ,从而避免连接数据库时弹出密码输入提示。
vi ~/.pgpass
*:5432:*:username:password
chmod 0600 ~/.pgpass
备注:最后要设置权限0600,保证安全性。
方法三:修改服务器端 pg_hba.conf
修改认证文件 $PGDATA/pg_hba.conf, 添加以下行, 并 reload使配置立即生效。
host dbname postgres 127.0.0.1/24 trust
service postgresql reload
备注:修改服务端 pg_hba.conf 并 reload 后,不再弹出密码输入提示。这样安全性差,慎用
引用官方说明文档:
用户家目录中的 .pgpass 或者 PGPASSFILE 引用的文件是一个可包含口令的文件。如果连接要求口令(并且没有用其它方法声明口令),那么可以用它。在 Microsoft Windows 上,文件名字是 %APPDATA%\postgresql\pgpass.conf (这里的 %APPDATA% 指用户配置里的 Application Data 子目录)。
这个文件应该有下面这样的格式行:
hostname:port:database:username:password
头四个字段每个都可以是一个文本值,或者 *,它匹配所有的东西。第一个匹配当前连接参数的口令行的口令域将得以使用。(因此,如果你使用了通配符,那么应该把最具体的记录放在前面。)如果记录包含 : 或者 \ ,应该用 \ 逃逸。一个 localhost 的主机名匹配来自本机的 host(TCP)和 local (Unix 域套接字)。
.pgpass 的权限必须不允许任何全局或者同组的用户访问;我们可以用命令 chmod 0600 ~/.pgpass 实现这个目的。如果权限比这个松,这个文件将被忽略。(不过目前在 Microsoft Windows 上没有检查这个文件的权限。)