【PostgreSQL】如何免密使用PostgreSQL数据库内置工具

如何免密使用PostgreSQL数据库内置工具

      • [方法 1:使用 `.pgpass` 文件自动输入密码](#方法 1:使用 .pgpass 文件自动输入密码)
      • [方法 2:使用环境变量 `PGPASSWORD`](#方法 2:使用环境变量 PGPASSWORD)

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

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


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

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

步骤:
  1. 创建 .pgpass 文件

    在用户的主目录下创建 .pgpass 文件(如果不存在),并设置权限为 600(仅用户可读写)。我是使用 root 用户执行,所以直接在 /root/ 目录下创建该文件。

    bash 复制代码
    touch ~/.pgpass
    chmod 600 ~/.pgpass
  2. 编辑 .pgpass 文件

    .pgpass 文件中添加以下内容:

    复制代码
    hostname:port:database:username:password

    例如:

    复制代码
    localhost:5432:database_test:test_user:test_password
    • hostname: 数据库主机;
    • port: 数据库端口(PostgreSQL数据库默认是 5432);
    • database: 数据库名称;
    • username: 数据库用户名;
    • password: 数据库密码;
  3. 运行 pg_restore

    使用 nohup 和重定向运行 pg_restore,此时不需要手动输入密码:

    bash 复制代码
    nohup pg_restore -U your_username -d database_name backup_file.dump > restore.log 2>&1 &

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


方法 2:使用环境变量 PGPASSWORD

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

步骤:
  1. 设置环境变量

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

    bash 复制代码
    export PGPASSWORD='your_password'
  2. 运行 pg_restore

    使用 nohup 和重定向运行 pg_restore

    bash 复制代码
    nohup pg_restore -U your_username -d your_database_name your_backup_file.dump > restore.log 2>&1 &

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


相关推荐
web安全工具库1 天前
告别刀耕火种:用 Makefile 自动化 C 语言项目编译
linux·运维·c语言·开发语言·数据库·算法·自动化
disanleya1 天前
怎样安全地开启MySQL远程管理权限?
数据库·mysql
【非典型Coder】1 天前
Statement和PreparedStatement区别
数据库
m0_736927041 天前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
java·数据库·sql·postgresql
lang201509281 天前
MySQL 8.0.29 及以上版本中 SSL/TLS 会话复用(Session Reuse)
数据库·mysql
望获linux1 天前
【实时Linux实战系列】使用 u-trace 或 a-trace 进行用户态应用剖析
java·linux·前端·网络·数据库·elasticsearch·操作系统
清和与九1 天前
binLog、redoLog和undoLog的区别
数据库·oracle
望获linux1 天前
【实时Linux实战系列】FPGA 与实时 Linux 的协同设计
大数据·linux·服务器·网络·数据库·fpga开发·操作系统
总有刁民想爱朕ha1 天前
Python自动化从入门到实战(24)如何高效的备份mysql数据库,数据备份datadir目录直接复制可行吗?一篇给小白的完全指南
数据库·python·自动化·mysql数据库备份
朝九晚五ฺ1 天前
【Redis学习】持久化机制(RDB/AOF)
数据库·redis·学习