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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:42:19