見出し画像

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の知識が乏しいので、もっと吸収していきたいと思います。


それでは、最後まで読んでくださって、ありがとうございました!