根据https://www.postgresql.org/docs/current/static/libpq-connect.html,参数" keepalives"和其他参数" keepalives_idle"," keepalives_interval"和" keepalives_count"仅当keepalives = 1时才相关。 但是我不清楚如果参数keepalives设置为零意味着什么? 如果keepalives参数设置为零(keepalives = 0)会发生什么? 这是否意味着postgresql会话永远不会终止?如果客户端申请被关闭会发生什么?如果网络连接中断,会发生什么?这是否意味着Postgresql服务器永远不会终止空闲会话?
答案 0 :(得分:2)
keepalives
是客户端设置。
如果将其设置为0,则客户端计算机上的TCP套接字将SO_KEEPALIVE
套接字选项设置为0。
然后,它不会在与数据库服务器的空闲连接上发送keepalive消息,以检查另一方是否还活着。
结果是客户端不会检测数据库服务器是否意外终止,即没有关闭TCP连接。
默认设置(在Linux上)是 off 。
通常没有必要在客户端启用keepalive:客户端会在下次尝试与服务器通信时注意到服务器何时死亡。
keepalive消息的另一个用途是阻止防火墙或代理关闭空闲连接。但是,由于PostgreSQL服务器无论如何都能在服务器端启用keepalive,因此应该注意这一点。