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

Flask+PostgreSQL数据库创建失败:postgres用户密码验证错误

解决Flask+PostgreSQL密码验证失败的问题

我之前也踩过一模一样的坑!明明确认密码没错,但执行db.create_all()时就是弹出password authentication failed for user "postgres"的错误,给你几个我当时排查解决的方向,应该能帮到你:

  • 检查PostgreSQL的本地认证模式
    PostgreSQL默认对localhost的postgres用户用peer认证(靠系统用户匹配),而不是密码认证。你需要修改pg_hba.conf配置文件:

    1. 找到这个文件:Linux一般在/etc/postgresql/[你的PostgreSQL版本]/main/pg_hba.conf,Windows在PostgreSQL安装目录的data文件夹里
    2. 找到类似下面的行:

      local all postgres peer

    3. peer改成md5,保存文件
    4. 重启PostgreSQL服务(Linux用systemctl restart postgresql,Windows在服务管理器里重启)
  • 手动测试psql连接
    先跳过Flask,直接用终端命令测试数据库连接:

    psql -U postgres -d lexus -h localhost
    

    输入你的密码mypassword,如果这个命令都连不上,那问题出在PostgreSQL本身的配置,和Flask无关;如果能连上,再检查Flask配置里的密码有没有特殊字符(比如@#这类),如果有需要URL编码,比如@要写成%40

  • 确认PostgreSQL服务状态
    有时候服务没启动也会伪装成密码错误的报错,先检查服务是否在运行:

    • Linux:systemctl status postgresql
    • Windows:打开服务管理器,找到PostgreSQL相关服务看是否处于运行状态
  • 确认目标数据库已创建
    注意db.create_all()是用来创建表的,不是创建数据库!你得先手动创建lexus数据库,可以用psql输入CREATE DATABASE lexus;,或者用pgAdmin图形界面创建。

  • 检查PostgreSQL监听地址
    打开postgresql.conf文件,确认listen_addresses设置为'localhost'或者'*',如果设置成了特定IP,localhost可能无法连接。

我当时就是第一个原因导致的,改完认证模式重启服务就正常了,你可以一个个排查试试!

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

火山引擎 最新活动