You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请求协助排查localhost:3000应用启动的PostgreSQL密码认证失败问题

排查PostgreSQL密码认证失败的问题

先留意你给出的错误提示:FATAL: password authentication failed for user "postgresq"——这里的用户名是postgresq(比PostgreSQL默认的管理员用户postgres少了最后一个字母l),这很可能是问题的核心!

下面是我整理的排查步骤,按优先级来:

  • 先检查database.yml里的用户名拼写
    你提到用pgAdmin能正常连接,说明数据库端的用户和密码是没问题的。那大概率是应用配置里的用户名写错了。打开你的database.yml文件,仔细核对username字段,是不是不小心写成了postgresq而不是正确的postgres?这种手滑的拼写错误太常见了。

  • 确认PostgreSQL的认证规则没被改动
    如果用户名确实是对的,那可以去检查PostgreSQL的pg_hba.conf配置文件(一般在数据库的数据目录下),看看本地连接的认证方式有没有变化。比如昨天可能是md5认证,今天被改成了peer或者其他方式?
    找到对应本地IP(127.0.0.1)的连接规则,确保是类似这样的配置:

    host    all             all             127.0.0.1/32            md5
    

    修改后记得重启PostgreSQL服务才能生效。

  • 重启应用并清理缓存
    有时候应用会缓存旧的数据库配置,哪怕你修改了database.yml也不会立刻生效。试试完全重启你的应用服务,如果是Rails这类框架,还可以跑一下rails tmp:clear清理临时缓存,再重新启动应用试试。

  • 检查数据库用户的状态
    用pgAdmin登录后,找到对应的数据库用户,右键查看属性,确认账户状态是「未锁定」的。虽然昨天正常今天突然锁定的概率不高,但也可以排除下这个可能性。

  • 排查环境变量的干扰
    有些应用会优先读取环境变量里的数据库配置,而不是database.yml里的内容。你可以在终端里检查下有没有相关的环境变量,比如Linux/macOS下执行echo $DATABASE_USER,Windows下执行echo %DATABASE_USER%,看看输出是不是postgresq——如果是的话,那就是环境变量覆盖了配置文件的设置。

先从用户名拼写这个点入手,应该能解决大部分问题!

内容的提问来源于stack exchange,提问作者Mantas

火山引擎 最新活动