免密使用PostgreSQL数据库内置工具的两种方法
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">引言</a></li><li><a href="#_label1">方法 1:使用 .pgpass 文件自动输入密码</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">步骤:</a></li></ul><li><a href="#_label2">方法 2:使用环境变量 PGPASSWORD</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_1">步骤:</a></li></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>引言</h2><p>我们在PostgreSQL数据库自带的各种工具时,每次使用都要输入数据库密码。比如在使用pg_dump 备份数据库数据时,使用 pg_restore 恢复数据库数据时。或者是在使用 pgbench 工具测试数据库性能时,每跑一个用例都要输入一次数据库密码,这里我们通过配置的方式,以后再使用这些工具就不需要输入数据库密码了。</p>
<p>我们下面以使用 pg_restore 工具恢复数据为例进行演示。在使用 pg_restore 恢复数据时,如果需要在后台运行并输入密码,可以通过以下方法解决密码输入问题,同时将日志输出到文件中:</p>
<p class="maodian"><a name="_label1"></a></p><h2>方法 1:使用 .pgpass 文件自动输入密码</h2>
<p>PostgreSQL 支持通过 <code>.pgpass</code> 文件自动提供密码,避免手动输入。</p>
<p class="maodian"><a name="_lab2_1_0"></a></p><p class="maodian"><a name="_lab2_2_1"></a></p><h3>步骤:</h3>
<ul><li>创建 <code>.pgpass</code> 文件<br />在用户的主目录下创建 <code>.pgpass</code> 文件(如果不存在),并设置权限为 600(仅用户可读写)。我是使用 <code>root</code> 用户执行,所以直接在 <code>/root/</code> 目录下创建该文件。</li></ul>
<div class="jb51code"><pre class="brush:bash;">touch ~/.pgpass
chmod 600 ~/.pgpass
</pre></div>
<ul><li>编辑 <code>.pgpass</code> 文件<br />在 <code>.pgpass</code> 文件中添加以下内容:</li></ul>
<div class="jb51code"><pre class="brush:yaml;">hostname:port:database:username:password
</pre></div>
<p>例如:</p>
<div class="jb51code"><pre class="brush:yaml;">localhost:5432:database_test:test_user:test_password
</pre></div>
<ol><li><ul><li><code>hostname</code>: 数据库主机;</li><li><code>port</code>: 数据库端口(PostgreSQL数据库默认是 <code>5432</code>);</li><li><code>database</code>: 数据库名称;</li><li><code>username</code>: 数据库用户名;</li><li><code>password</code>: 数据库密码;</li></ul></li><li><p>运行 <code>pg_restore</code><br />使用 <code>nohup</code> 和重定向运行 <code>pg_restore</code>,此时不需要手动输入密码:</p></li></ol>
<div class="jb51code"><pre class="brush:bash;">nohup pg_restore -U your_username -d database_name backup_file.dump > restore.log 2>&1 &
</pre></div>
<p>我在服务器上使用 <code>root</code> 用户成功执行该命令,不需要输入数据库密码。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202503/20253994955254.png" /></p>
<p class="maodian"><a name="_label2"></a></p><h2>方法 2:使用环境变量 PGPASSWORD</h2>
<p>可以通过设置环境变量 <code>PGPASSWORD</code> 来提供密码。</p>
<h3>步骤:</h3>
<ul><li><p>设置环境变量<br />在运行 <code>pg_restore</code> 之前,设置 <code>PGPASSWORD</code> 环境变量:</p></li></ul>
<div class="jb51code"><pre class="brush:bash;">export PGPASSWORD='your_password'
</pre></div>
<ul><li>运行 <code>pg_restore</code><br />使用 <code>nohup</code> 和重定向运行 <code>pg_restore</code>:</li></ul>
<div class="jb51code"><pre class="brush:bash;">nohup pg_restore -U your_username -d your_database_name your_backup_file.dump > restore.log 2>&1 &
</pre></div>
<p><strong>PS</strong>:这种方法会将密码暴露在命令行历史中,可能存在安全风险。</p>
頁:
[1]