ZeosDBO连接PostgreSQL出现SQL逻辑错误的排查与解决
FireDAC迁移至ZeosDBO 7.2.14后的PostgreSQL SQL执行错误排查
环境信息
- 迁移场景:基于FireDAC的系统迁移到ZeosDBO 7.2.14
- 运行环境:PostgreSQL 15.3 + Delphi 11.3
问题现象
简单状态查询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带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
相关产品推荐
相关产品推荐

