执行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 '你的新密码'; - 修改完成后停止服务,再用正常模式启动即可。
- 先停止PostgreSQL服务(不同系统命令不同):
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
相关产品推荐
相关产品推荐

