Задать вопрос
@AlmazKayum

Почему отключается PostgreSQL?

Здравствуйте.
Простейший SQL запрос get_id
class User:
    def __init__(self, database):
        self.conn = psycopg2.connect(database)
        self.cursor = self.conn.cursor()
    def get_id(self, user_id):
        with self.conn:
            self.cursor.execute('SELECT id FROM users WHERE user_id=%s', (user_id,))
            return self.cursor.fetchone()

После запуска приложения через некоторое время, иногда через полчаса, иногда через 5-10 часов неожиданно отключается соединение с базой данных
и возникает ошибка
File "/root/tgbot/postgres.py", line 22, in get_id
self.cursor.execute('SELECT id FROM users WHERE user_id=%s', (user_id,))
psycopg2.OperationalError: SSL connection has been closed unexpectedly

и следом
psycopg2.InterfaceError: connection already closed
Дальнейшие попытки обращения к БД дают ту же ошибку,
psycopg2.InterfaceError: connection already closed
Ошибка исправляется только перезапуском postgresql и затем приложения.

Ubuntu 20.04
Python==3.8.10
PostgreSQL==12
psycopg2-binary==2.9.5

У меня несколько серверов, есть еще Debian 11, на них стоят разные версии PostgreSQL, есть 11, есть 13.
psycopg2-binary есть 2.9.5, есть 2.9.4, есть 2.9.3

И на двух серверах эта ошибка возникает, на остальных приложение можно месяцами не трогать, оно будет работать. Как будто неважны версии и ос.

В чем может быть дело?
  • Вопрос задан
  • 819 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Connection string включает SSL, насколько я понял?

psycopg2.InterfaceError: connection already closed
Дальнейшие попытки обращения к БД дают ту же ошибку,
psycopg2.InterfaceError: connection already closed
Ошибка исправляется только перезапуском postgresql и затем приложения.
Что в логах? Мониторинг СУБД имеется? Что там интересного в тот момент?
Какой лимит соединений выставлен?
Зачем открывается соединение СУБД каждый раз? Используй connection pool.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы