查看: 88|回复: 0

[PostgreSQL] 免密使用PostgreSQL数据库内置工具的两种方法

[复制链接]

0

主题

0

回帖

0

积分

积极分子

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2009-7-24
发表于 2025-3-9 09:50:21 | 显示全部楼层 |阅读模式

引言

我们在PostgreSQL数据库自带的各种工具时,每次使用都要输入数据库密码。比如在使用pg_dump 备份数据库数据时,使用 pg_restore 恢复数据库数据时。或者是在使用 pgbench 工具测试数据库性能时,每跑一个用例都要输入一次数据库密码,这里我们通过配置的方式,以后再使用这些工具就不需要输入数据库密码了。

我们下面以使用 pg_restore 工具恢复数据为例进行演示。在使用 pg_restore 恢复数据时,如果需要在后台运行并输入密码,可以通过以下方法解决密码输入问题,同时将日志输出到文件中:

方法 1:使用 .pgpass 文件自动输入密码

PostgreSQL 支持通过 .pgpass 文件自动提供密码,避免手动输入。

步骤:

  • 创建 .pgpass 文件
    在用户的主目录下创建 .pgpass 文件(如果不存在),并设置权限为 600(仅用户可读写)。我是使用 root 用户执行,所以直接在 /root/ 目录下创建该文件。
touch ~/.pgpass
chmod 600 ~/.pgpass
  • 编辑 .pgpass 文件
    在 .pgpass 文件中添加以下内容:
hostname:port:database:username:password

例如:

localhost:5432:database_test:test_user:test_password
    • hostname: 数据库主机;
    • port: 数据库端口(PostgreSQL数据库默认是 5432);
    • database: 数据库名称;
    • username: 数据库用户名;
    • password: 数据库密码;
  1. 运行 pg_restore
    使用 nohup 和重定向运行 pg_restore,此时不需要手动输入密码:

nohup pg_restore -U your_username -d database_name backup_file.dump > restore.log 2>&1 &

我在服务器上使用 root 用户成功执行该命令,不需要输入数据库密码。

方法 2:使用环境变量 GPASSWORD

可以通过设置环境变量 PGPASSWORD 来提供密码。

步骤:

  • 设置环境变量
    在运行 pg_restore 之前,设置 PGPASSWORD 环境变量:

export PGPASSWORD='your_password'
  • 运行 pg_restore
    使用 nohup 和重定向运行 pg_restore
nohup pg_restore -U your_username -d your_database_name your_backup_file.dump > restore.log 2>&1 &

PS:这种方法会将密码暴露在命令行历史中,可能存在安全风险。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部