database connection_error ai_generated partial

psycopg2.OperationalError: 错误:无法向服务器发送数据:管道破裂

psycopg2.OperationalError: ERROR: could not send data to server: Broken pipe

ID: database/postgresql-checkpoint-wait-timeout

其他格式: JSON · Markdown 中文 · English
78%修复率
82%置信度
1证据数
2024-01-10首次发现

版本兼容性

版本状态引入弃用备注
PostgreSQL 13 active
PostgreSQL 14 active
PostgreSQL 15 active

根因分析

PostgreSQL 服务器意外关闭连接,通常是由于超时(如 statement_timeout、idle_in_transaction_session_timeout)或服务器崩溃,导致客户端出现管道破裂。

English

The PostgreSQL server closed the connection unexpectedly, often due to a timeout (e.g., statement_timeout, idle_in_transaction_session_timeout) or a server crash, causing a broken pipe on the client side.

generic

官方文档

https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-KEEPALIVES

解决方案

  1. Check PostgreSQL logs for the reason the connection was terminated (e.g., statement_timeout, idle_in_transaction_session_timeout). Adjust the relevant timeout parameters in postgresql.conf:
    statement_timeout = 0  # disable or increase
    idle_in_transaction_session_timeout = 0
  2. Enable TCP keepalives on the client side to detect broken connections earlier and automatically reconnect:
    import psycopg2
    conn = psycopg2.connect("host=... keepalives=1 keepalives_idle=30 keepalives_interval=10 keepalives_count=5")

无效尝试

常见但无效的做法:

  1. Increasing connection pool size in the application 90% 失败

    The error is not about pool exhaustion but about an existing connection being terminated; more connections don't fix broken pipes.

  2. Restarting the application without checking server logs 85% 失败

    The underlying cause (e.g., server-side timeout) is not addressed; the error will recur.