You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行mix phx.new创建Phoenix应用时PostgreSQL认证失败求助

解决Postgrex.Protocol连接失败(FATAL 28P01)问题

这个错误本质是Phoenix默认用postgres用户无密码连接本地PostgreSQL,但你的PostgreSQL要么给这个用户设了密码,要么认证规则不允许无密码登录,跟卸载重装Phoenix没关系,问题出在PostgreSQL的配置上。

几个可行的解决办法

1. 确认并重置postgres用户密码

  • 打开终端,直接用psql连接PostgreSQL:
    psql -U postgres
    
    如果弹出密码输入框,说明该用户有密码,输入正确密码即可进入;要是忘了密码,按以下步骤重置:
    • 先停止PostgreSQL服务(不同系统命令不同):
      # macOS(Homebrew环境)
      brew services stop postgresql
      # Linux(如Ubuntu)
      sudo systemctl stop postgresql
      
    • 以信任模式启动PostgreSQL,无需密码即可连接:
      # macOS
      pg_ctl -D /usr/local/var/postgres start -o "-c hostall=trust"
      # Linux
      sudo -u postgres pg_ctl -D /var/lib/postgresql/15/main start -o "-c hostall=trust"
      
    • 重新连接后修改密码:
      ALTER USER postgres PASSWORD '你的新密码';
      
    • 修改完成后停止服务,再用正常模式启动即可。

2. 创建Phoenix项目时跳过数据库初始化,后续手动修改配置

  • 先执行以下命令创建项目,跳过数据库初始化步骤:
    mix phx.new my_hello --no-ecto
    
  • 进入项目目录,找到config/dev.exs文件,定位到数据库配置段,添加正确的密码:
    config :my_hello, MyHello.Repo,
      username: "postgres",
      password: "你的postgres密码",
      hostname: "localhost",
      database: "my_hello_dev",
      stacktrace: true,
      show_sensitive_data_on_connection_error: true,
      pool_size: 10
    
  • 最后执行数据库初始化命令:
    mix ecto.create
    

3. 修改PostgreSQL认证规则,允许无密码登录

  • 找到PostgreSQL的pg_hba.conf配置文件,常见路径:
    # macOS(Homebrew环境)
    /usr/local/var/postgres/pg_hba.conf
    # Linux
    /etc/postgresql/15/main/pg_hba.conf
    
  • 找到如下行:
    local   all             postgres                                scram-sha-256
    
  • 将scram-sha-256替换为trust:
    local   all             postgres                                trust
    
  • 重启PostgreSQL服务,配置生效后Phoenix即可无密码连接数据库。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:33:25