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

ZeosDBO连接PostgreSQL出现SQL逻辑错误的排查与解决

FireDAC迁移至ZeosDBO 7.2.14后的PostgreSQL SQL执行错误排查

环境信息

  • 迁移场景:基于FireDAC的系统迁移到ZeosDBO 7.2.14
  • 运行环境:PostgreSQL 15.3 + Delphi 11.3

问题现象

  1. 简单状态查询SQL可正常执行
    用于查询数据库连接状态的SQL能正常返回结果:

    SELECT 
      COUNT(*) AS TOTALCONNECTIONS
    , (SELECT COUNT(*) FROM pg_stat_activity  
        WHERE state = 'active') AS TOTALACTIVE
    , (SELECT COUNT(*) FROM pg_stat_activity  
        WHERE state = 'idle') AS TOTALIDLE
      FROM pg_stat_activity
    
  2. 带Schema的登录查询SQL执行报错
    处理登录请求的SQL在执行时抛出SQL Error: SQL logic error,对应的Delphi代码如下:

    with FDataSet do
    begin
      Close;
      SQL.Clear;
      if not Schema.IsEmpty then
        SQL.Add('set search_path = ' + QuotedStr(Schema) + ';');
      SQL.Add('SELECT ');
      SQL.Add('  L1.LIC_STATUS');
      SQL.Add(', S1.SYS_ID');
      SQL.Add(', U1.UNI_ID');
      SQL.Add('  FROM licenca L1');
      SQL.Add('  JOIN Empresa E1 on E1.EMP_ID = L1.EMP_ID');
      SQL.Add('  JOIN Sistema S1 on S1.SYS_ID = L1.SYS_ID');
      SQL.Add('  JOIN Unidade U1 on U1.EMP_ID = E1.EMP_ID');
      SQL.Add(' WHERE S1.SYS_SIGLA ILIKE :sigla');
      SQL.Add('   AND U1.UNI_CPFCNPJ LIKE :cpfcnpj');
      ParamByName('sigla').AsString := QuotedStr(sigla);
      ParamByName('cpfcnpj').AsString := QuotedStr(cpfcnpj);
      Open;  // === error: "SQL Error: SQL logic error"
    end;
    

    注:该SQL在pgAdmin中可正常运行,且错误发生时数据库协议会自动切换为sqlite-3

问题根源与修复

  • 问题原因:类继承逻辑缺陷导致数据库连接丢失
  • 修复结果:修复类继承相关的连接处理逻辑后,系统恢复正常,登录SQL可正确执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:20:12