![見出し画像](https://assets.st-note.com/production/uploads/images/25114932/rectangle_large_type_2_3151b9754468a5c1ffc40350604a6fc7.jpeg?width=1200)
DjangoでPostgreSQLを使っているときに出たconnnectionエラーの解決方法
こんにちは!
Phone Appli、Salesforceのプロダクトチームの小林です。
普段はSalesforceの製品について仕様検討、開発などをしていますが、Salesforceの制限などで実装が難しい機能については、Azure、HerokuなどのPaaS上で開発をすることがあります。
今回はそのPaaSで開発しているアプリケーションのデータベースでconnectionエラーが発生していたので、解決方法を備忘録として載せておきます。
アプリケーションの構成
Azure Web Apps
Python 3.6.4(Django)
PostgreSQL
Azureを使って、Djangoで開発をしています。
今回、connectionエラーが発生していたのは、PostgreSQLのデータベースです。
エラーの原因
Azureでconnectionエラーが発生していた原因は、処理中に発行しているクエリがidle状態のまま開かれ続けていることでした。
idle状態であることを確認するためには以下の手順で確認します。
①PostgreSQLのDBを確認するツールをインストール
②以下のクエリでDBのプロセスを確認
SELECT * FROM pg_stat_activity;
③「state」の行を確認して、「idle」「idle in transaction」になっているプロセスを確認
エラーが発生していたとき、idle状態のプロセスが大量にありました。
それが原因でconnectionエラーが発生している状態でした。
解決方法
解決方法はいろいろな方法があり、悩んだのですが、1番簡単な方法は、クエリを発行している処理の最後に以下を追加することです。
connection.close()
これだけです!
Djangoを使っているので、この方法が利用できます。
DBとのコネクションが解除されるので、処理が完全に終わっていることを確認してから、処理を追加するようにしましょう。
また、以下のようにconnectionをimportすることを忘れないようにしましょう。
from django.db import connection
まとめ
今回はAzureで使っているPostgreSQLのconnectionエラーの原因、解決方法についてまとめました。
普段、Salesforceのことばかりやっていると、あまりサーバやDBについて意識することはないので、Salesforceの偉大さを実感しますね…。
まだまだ、PaaSでの開発、Pythonの知識が乏しいので、もっと吸収していきたいと思います。
それでは、最後まで読んでくださって、ありがとうございました!