☰
PostgreSQL 密码丢了、端口被占了,我是这么救回来的
2026/10/17 2:33:57 网站建设 项目流程

一、背景

本地 PostgreSQL 数据库的 用户密码未知,导致后台服务(RT)报错:

text

System.InvalidOperationException: "The Connection is not open."

堆栈指向PostgresqlDB.ExecuteReader,说明数据库连接失败。

同时,项目配置文件里写的是Password=your_password,但本地数据库密码不是这个,导致连接被拒绝。

核心问题:下载的数据库自动跳过密码设置,导致密码随机生成,重新下载仍然不行。

数据库密码与配置文件不一致,需要重置本地密码。

二、具体思路(核心逻辑)

PostgreSQL 的密码认证由pg_hba.conf文件控制。默认情况下,本地连接使用md5认证,需要密码。如果密码未知,可以通过以下思路绕过:

核心思路:临时把认证方式改成trust(免密),无密码登录后,用ALTER USER修改密码,再把认证方式改回md5。

整个流程分五步:

  1. 改配置:把pg_hba.conf里的md5改成trust

  2. 重启服务:让配置生效

  3. 无密码登录:用psql免密进入数据库

  4. 改密码:执行ALTER USER设置新密码

  5. 恢复配置:把trust改回md5,重启服务

为什么这样做?

  • 不需要知道旧密码,直接绕过认证

  • 改完后恢复安全配置,不影响生产环境

  • 只影响本地连接,不影响远程

三、具体做法如下:(Windows 为例)

环境信息

  • 操作系统:Windows 10/11

  • PostgreSQL 版本:9.5

  • 安装路径:C:\Program Files\PostgreSQL\9.5\

  • 数据目录:C:\Program Files\PostgreSQL\9.5\data\


第一步:修改pg_hba.conf

文件位置:

text

C:\Program Files\PostgreSQL\9.5\data\pg_hba.conf

用管理员身份打开记事本(右键记事本 -> 以管理员身份运行 -> 文件 -> 打开)。

找到以下两行:

text

host all all 127.0.0.1/32 md5 host all all ::1/128 md5

把md5改成trust:

text

host all all 127.0.0.1/32 trust host all all ::1/128 trust

保存文件。

注意:trust表示“本地连接免密”,仅用于临时重置密码。改完后必须恢复成md5。


第二步:重启 PostgreSQL 服务

方式一:用命令重启
打开 CMD,进入bin目录:

cmd

cd /d "C:\Program Files\PostgreSQL\9.5\bin"

执行:

cmd

pg_ctl restart -D "C:\Program Files\PostgreSQL\9.5\data"

方式二:用 Windows 服务管理器
按Win + R,输入services.msc,找到postgresql-x64-9.5,右键 -> 重启。


第三步:无密码登录数据库

在 CMD 中执行:

cmd

psql -U postgres -h localhost

因为pg_hba.conf已经改成trust,这次不会提示输入密码,直接进入:

text

postgres=#

注意:如果提示fe_sendauth: no password supplied,说明pg_hba.conf没改对,或者服务没重启。


第四步:修改密码

在postgres=#提示符下执行:

sql

ALTER USER postgres WITH PASSWORD 'your_password';

说明:

  • 换成你想要的密码(这里跟项目配置文件对齐)。

  • 单引号必须是英文单引号。

  • 分号;不能少。

回车后,如果显示ALTER ROLE,说明修改成功。

退出 psql:

text

\q

第五步:恢复认证配置

再次用管理员身份打开pg_hba.conf,把刚才改的trust改回md5:

text

host all all 127.0.0.1/32 md5 host all all ::1/128 md5

保存文件。

重启 PostgreSQL 服务:

cmd

pg_ctl restart -D "C:\Program Files\PostgreSQL\9.5\data"

第六步:验证密码是否修改成功

在 CMD 中执行:

cmd

psql -U postgres -h localhost

这次会提示输入密码:

text

用户 postgres 的口令:

盲打 your_password(输入时不显示任何字符),回车。

  • 成功进入your_password=#→ 密码修改成功。

  • 提示password authentication failed→ 密码没改成功,检查pg_hba.conf是否改对、服务是否重启。

四、 常见问题与踩坑记录

问题 1:psql: 无法联接到服务器: Connection refused

原因:PostgreSQL 服务没启动。
解决:执行pg_ctl start -D "C:\Program Files\PostgreSQL\9.5\data"。

问题 2:psql: fe_sendauth: no password supplied

原因:pg_hba.conf没改成trust,或者改完没重启服务。
解决:重新检查配置文件,重启服务。

问题 3:password authentication failed for user "your_password"

原因:密码不对。
解决:重新走一遍trust绕过流程,用ALTER USER改密码。

问题 4:改完密码后,RT 还是报The Connection is not open

原因:RT 的连接字符串里,数据库地址可能不是localhost,而是内网 IP。
解决:去VceClusterRT项目的App.config里,确认ConnectionString里的Server=是什么。如果是内网 IP,说明 RT 连的是内网数据库,本地密码改了也没用。

问题 5:pg_ctl命令找不到

原因:不在bin目录下。
解决:先cd /d "C:\Program Files\PostgreSQL\9.5\bin",或者把bin目录加到系统环境变量 PATH 里。

核心口诀:

改 trust → 重启 → 免密登录 → ALTER USER → 改回 md5 → 重启 → 验证。

一句话总结:
PostgreSQL 忘记密码不可怕,通过临时调整pg_hba.conf的认证方式,可以无密码进入数据库重置密码。关键是改完必须恢复md5,否则数据库会处于无密码保护的危险状态

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询