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

DBeaver连接Fly.io上PostgreSQL时因错误陷入无限循环求助

问题排查思路

核心问题

Fly.io托管的PostgreSQL实例,使用plpython3u扩展时出现异常:执行含语法错误、表名错误或函数返回错误的代码时,查询会无限循环,手动终止后抛出连接关闭的异常(如下),该问题仅生产环境存在,本地环境正常。

org.postgresql.util.PSQLException: This connection has been closed.
    at org.postgresql.jdbc.PgConnection.checkClosed(PgConnection.java:907)
    at org.postgresql.jdbc.PgConnection.createStatement(PgConnection.java:1776)
    at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCConnectionImpl.createStatement(JDBCConnectionImpl.java:413)
    at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCConnectionImpl.prepareStatement(JDBCConnectionImpl.java:131)
    at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCConnectionImpl.prepareStatement(JDBCConnectionImpl.java:1)
    at org.jkiss.dbeaver.model.DBUtils.createStatement(DBUtils.java:1453)
    at org.jkiss.dbeaver.model.DBUtils.makeStatement(DBUtils.java:1419)
    at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:558)
    at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$1(SQLQueryJob.java:491)
    at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:190)
    at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:498)
    at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:934)
    at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:3940)
    at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:123)
    at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:190)
    at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:121)
    at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5142)
    at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

排查步骤

  • 版本一致性检查:对比本地和生产环境的PostgreSQL版本、plpython3u扩展版本,执行以下SQL查询:

    SELECT version();
    SELECT extname, extversion FROM pg_extension WHERE extname = 'plpython3u';
    

    Fly.io可能自动推送了版本更新,导致扩展兼容性问题。

  • 查看数据库日志:通过fly logs命令拉取生产实例的日志,重点关注查询卡住时段的输出,排查是否存在plpython3u相关的崩溃日志、资源耗尽(CPU/内存)提示,或进程死锁信息。

  • 函数错误处理验证:检查生产环境中自定义的plpython3u函数,确认是否遗漏了异常捕获逻辑(如Python的try-except块)。若函数在出错时未正确终止,可能进入无限循环。对比本地环境的函数定义,排查差异。

  • 资源限制排查:通过Fly.io控制台查看生产实例的实时资源使用情况,确认CPU、内存是否在查询出错时出现耗尽。资源不足可能导致进程无法正常终止,表现为无限循环。

  • 纯SQL错误测试:执行不含plpython3u的错误SQL(如SELECT * FROM non_existent_table;),验证是否同样出现无限循环。若纯SQL错误也触发问题,说明故障点在PostgreSQL本身或Fly.io环境配置;若仅涉及plpython3u的查询出错,则聚焦扩展或自定义函数。

  • 客户端配置对比:检查DBeaver在本地和生产环境的连接配置,重点对比查询超时、自动重试、连接保持等参数。客户端的重试机制可能导致出错时持续发起请求,误判为查询无限循环。

内容的提问来源于stack exchange,提问作者Guilherme Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:05:31