PostgreSQL服务器版本未知回退至客户端版本问题求助
解决PostgreSQL 14.7 + Qt5.8.0连接时服务器版本未知的警告
问题核心是Qt5.8.0的QPSQL驱动发布时间早于PostgreSQL 14.x系列,驱动内置的版本检测逻辑无法识别14.x版本,所以连接成功后会反复弹出the server version of this postgresql is unknown falling back to the client version警告。
以下是三种可行的解决办法:
手动指定服务器版本(推荐)
在数据库连接打开前,通过setConnectOptions直接告诉驱动服务器的具体版本,跳过自动检测步骤。修改你的代码如下:#include <QtSql> #include <QApplication> #include <cstdlib> #include <iostream> int main() { FILE* stream = _popen("pg_config --version", "r"); char output[128]; fgets(output, sizeof(output), stream); std::cout << "PostgreSQL version: " << output << std::endl; QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("localhost"); db.setDatabaseName("test"); db.setUserName("testtt"); db.setPassword("password"); // 新增:指定服务器版本为14.7,同时保留编码设置 db.setConnectOptions("client_encoding=UTF8;serverVersion=14.7"); bool ok = db.open(); qDebug() << ok; qDebug() << db.connectionName(); qDebug() << db.contains(); return 0; }升级Qt版本
如果项目允许,把Qt升级到5.15及以上版本。这些后续版本的QPSQL驱动已经更新了版本识别逻辑,能正常识别PostgreSQL 14+的版本号,彻底解决这个警告问题。临时屏蔽警告(不推荐)
要是只是不想看到警告输出,可通过Qt日志过滤功能屏蔽该类警告,但这只是治标不治本,可能影响后续依赖版本信息的功能。代码开头添加如下内容:#include <QLoggingCategory> int main() { // 屏蔽QPSQL的警告日志 QLoggingCategory::setFilterRules("qt.sql.qpsql.warning=false"); // 剩余原有代码... }
内容的提问来源于stack exchange,提问作者ThomasEdition
相关产品推荐
相关产品推荐

