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

Python通过SSH+SSL连接PostgreSQL:无法执行INSERT/CREATE操作

解决Python SSH连接PostgreSQL执行写入操作时的连接中断问题
  • 事务提交是核心问题
    Python使用psycopg2这类PostgreSQL驱动时,默认会开启事务机制。你执行INSERT/CREATE后如果没有手动提交事务,连接会因为事务挂起超时被服务器强制断开。两种解决方式:

    • 连接时直接开启自动提交:
      conn = psycopg2.connect(...)
      conn.autocommit = True
      
    • 执行完写入命令后手动提交:
      cursor.execute("INSERT INTO your_table VALUES (...)")
      conn.commit()
      
  • 给SSH隧道添加心跳保活
    用paramiko等库建立SSH隧道时,默认超时设置可能偏短,写入操作通常比查询耗时更长,容易触发隧道提前断开。可以设置定期发送保活包维持连接:

    from paramiko import SSHClient
    ssh = SSHClient()
    # 完成SSH连接初始化后添加心跳设置
    ssh.get_transport().set_keepalive(30)  # 每隔30秒发送一次保活包
    
  • 查看服务器端PostgreSQL日志
    登录数据库所在服务器,找到PostgreSQL的日志文件(通常在/var/log/postgresql/目录下),日志里会记录更详细的断开原因——比如是否是服务器端因资源限制、会话参数异常主动终止连接,即便DBeaver能正常操作,Python连接的会话参数可能存在差异。

  • 对齐驱动版本与SSL配置
    确保你使用的PostgreSQL驱动(如psycopg2)是最新版本,旧版本可能存在SSL交互的bug。同时,连接时的SSL参数要和DBeaver保持一致,比如显式指定sslmode:

    conn = psycopg2.connect(
        dbname="your_db",
        user="your_user",
        password="your_pass",
        host="127.0.0.1",
        port="5432",  # SSH映射的本地端口
        sslmode="require"
    )
    
  • 排查本地防火墙或杀毒软件
    错误码10053属于本地软件导致的连接中断,大概率是本地防火墙、杀毒软件拦截了长时间的连接会话。可以临时关闭相关软件,测试写入操作是否恢复正常。

内容的提问来源于stack exchange,提问作者Robert R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:15