Amazon Relational Database Service (Amazon RDS) for PostgreSQL または Amazon Aurora PostgreSQL 互換エディションの DB インスタンスでクエリを実行しようとしました。しかし、実行すると次のエラーが起こりました。「could not send data to client」または「could not receive data from client」。
解決方法
Amazon RDS DB インスタンスのバックエンドプロセスは、クライアントとの間でデータを送受信できる必要があります。バックエンドプロセスはデータを送受信できない場合、PostgreSQL ログにエラーの 1 つを記録します。この問題をトラブルシューティングするには、次の手順を実行してください。
クライアントの稼働状況を確認する
最初にクライアントプロセスの稼働状況を確認します。例えば、メモリ不足 (OOM) が原因でクライアントプロセスがクラッシュすると、セッションが正しく終了しない可能性があります。このような終了が、そういった問題のうち、いずれかの問題の原因となる場合があります。
tcp_keepalives_idle および tcp_keepalives_interval パラメーターを短くする
クエリの処理時間が長すぎる場合は、セッションがクライアントで正しい方法で終了しない可能性があります。この問題を解決するには、クライアントのタイムアウト設定を延長します。tcp_keepalives_idle と tcp_keepalives_interval パラメータを短縮することで、バックエンドプロセスからクライアントの稼働状態を確認することもできます。詳細については、「Working with parameter groups」をご参照ください。
tcp_keepalives_idle と tcp_keepalives_interval のデフォルト値を確認するには、psql などの PostgreSQL クライアントを使用して次のコマンドを実行します:
SELECT name, setting FROM pg_settings WHERE name LIKE 'tcp_keepalives_%'
接続を確認する
クエリの処理時間を短くしてもエラーが発生する場合は、クライアントと DB インスタンス間の接続を確認してください。
rdsadmin セッションからのフェイルオーバー後にエラーが発生するかどうかを確認する
rdsadmin セッションからのフェイルオーバー後にエラーが発生した場合は、そのエラーを無視します。
関連情報
PostgreSQL Error Codes (PostgreSQL ウェブサイト内)
Connections and Authentication (PostgreSQL ウェブサイト内)
Setting TCP keepalives parameters