@Atroshchenko-Dima
Python, postgres

Как исправить ошибку psycopg2.InterfaceError: connection already closed?

У меня была проблема, в моем приложении написанном на flask, было подключение к БД и все работало корректно, но я потерял доступ к таблице задавая sql запросы через python или через pgadmin, т.е ошибок никаких не выдавало, а была просто бесконечная загрузка(при любых запросах).

Выполняя запрос "select * from pg_stat_activity;" я увидел что некоторые сессии висят в состоянии idle in transaction.

Далее я решил выполнить такой запрос
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity 
WHERE datname = 'dbname'
  AND pid <> pg_backend_pid()
  AND state = 'idle in transaction' 
  AND state_change < current_timestamp - INTERVAL '5' MINUTE;


Теперь я могу выполнять запросы из pgadmin/python и в целом подключаться к данной таблице, но при открытии моего приложения появилась такая ошибка.

psycopg2.InterfaceError: connection already closed
Traceback (most recent call last)
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 2213, in __call__
return self.wsgi_app(environ, start_response)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 2193, in wsgi_app
response = self.handle_exception(e)
           ^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
     ^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/T2app/./app.py", line 27, in index
cur = conn.cursor()
      ^^^^^^^^^^^^^
psycopg2.InterfaceError: connection already closed


Подскажите, пожалуйста, как мне исправить это?
  • Вопрос задан
  • 324 просмотра
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Перезапустите приложение, что бы оно переподключилось к базе данных.

И впишите в приложение проверку/реакцию на разрыв соединения с базой данных, как произошло из-за pg_terminate_backend(pid).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы