连接PostgreSQL遇问题:已解决QPSQL驱动加载错误仍无法连接
Qt连接PostgreSQL失败:用户认证问题排查方案
问题背景
已解决QPSQL驱动未加载问题(复制Qt对应.dll到项目目录),但仍无法连接PostgreSQL,连接代码如下:
inline bool createConnection(){ QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("127.0.0.1"); db.setDatabaseName("ed_sim"); db.setUserName("postgres"); db.setPassword("89256328258i"); db.setPort(5432); if(!db.open()){ QMessageBox::warning(0, "Database error", "Connection with BD!"); qDebug() << db.lastError().text(); return false; } else{ QMessageBox::information(0, "Connect", "Great"); return 1; } }
启动后报错(核心信息):
connection to server at "127.0.0.1", port 5432 failed: ?????: ???????????? "postgres" ?? ?????? ??????? ?????????? (?? ??????) QPSQL: Unable to connect
排查与解决步骤
确认PostgreSQL服务状态
打开Windows服务管理器(Win+R输入services.msc),找到PostgreSQL相关服务,确保处于「正在运行」状态,未运行则手动启动。验证数据库与账号有效性
用PostgreSQL自带的psql命令行或pgAdmin工具,尝试用账号postgres、密码89256328258i连接ed_sim数据库:- 若无法登录,先确认密码是否正确,或
ed_sim数据库是否已创建(可在pgAdmin的「Databases」列表中查看)。
- 若无法登录,先确认密码是否正确,或
修改PostgreSQL认证配置
这是此类问题最常见的原因:PostgreSQL默认认证规则限制了本地连接。- 找到PostgreSQL安装目录下的
data文件夹(例:C:\Program Files\PostgreSQL\15\data,版本号依实际情况调整); - 打开
pg_hba.conf文件,找到IPv4本地连接配置段:# IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 - 将认证方式改为
md5(兼容多数场景):host all all 127.0.0.1/32 md5 - 保存文件后,重启PostgreSQL服务使配置生效。
- 找到PostgreSQL安装目录下的
代码细节优化
代码中return 1;可改为return true;,保持bool返回值的类型一致性;也可增加qDebug() << db.lastError().type();输出错误类型,辅助定位问题。
内容的提问来源于stack exchange,提问作者Gelly Houp
相关产品推荐
相关产品推荐

