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
相关产品推荐
相关产品推荐

