我试图查询 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 或 Amazon Aurora PostgreSQL 兼容数据库实例。但这样做时,就会收到以下错误之一:“无法向客户端发送数据”或“无法从客户端接收数据”
解决方法
Amazon RDS 数据库实例中的后端进程必须能够从客户端发送或接收数据。如后端进程无法发送或接收数据,则后端进程会在 PostgreSQL 日志中记录其中一个错误。要解决此问题,请完成以下步骤。
检查客户端是否为活动状态
首先检查客户端进程是否为活动状态。例如,如果客户端进程因内存不足 (OOM) 崩溃,则会话可能会被错误地终止。这种终止可能导致其中任何一个错误发生。
缩短 tcp_keepalives_idle 和 tcp_keepalives_interval 参数
如查询处理时间过长,则会话可能已经从客户端错误终止。要解决此问题,请增加客户端的超时设置。亦可缩短 tcp_keepalives_idle 以及 tcp_keepalives_interval 参数,从后端进程中检查客户端的活跃性。有关更多信息,可参阅使用参数组。
要检查 tcp_keepalives_idle 以及 tcp_keepalives_interval 的默认值,请使用 PostgreSQL 客户端(诸如 psql)运行以下命令:
SELECT name, setting FROM pg_settings WHERE name LIKE 'tcp_keepalives_%'
检查连通性
如果在查询处理时间减少的情况下出现错误,则检查客户端和数据库实例之间的连接。
检查从 rdsadmin 会话进行失效转移后是否出现错误
如果从 rdsadmin 会话进行失效转移后出现错误,则忽略该错误。
相关信息
PostgreSQL 错误码(位于 PostgreSQL 网站上)
连接和身份验证(位于 PostgreSQL 网站上)
设置 TCP keepalives 参数