@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

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

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

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

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

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