Почему обновление до psycopg 3.x приводит к таймауту базы данных?

У меня есть приложение Django 5.x. Я использовал psycopg2, а теперь пытаюсь обновить его до psycopg 3. Это довольно просто: Я удалил все, что связано с psycopg2, и установил psycopg[binary].

Однако, когда я запускаю свой набор тестов сейчас (параллельно), я внезапно получаю connection timeout expired и canceling statement due to statement timeout ошибки, которых раньше не было!

Моя конфигурация базы данных довольно проста:

STATEMENT_TIMEOUT = get_from_env(
    "POSTGRES_STATEMENT_TIMEOUT", default=30000, type_cast=int
)
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": get_from_env("DB_NAME", "my-db"),
        "USER": get_from_env("DB_USERNAME", "my-db-user"),
        "PASSWORD": get_from_env("DB_PASSWORD", DEFAULT_DB_PASSWORD),
        "HOST": get_from_env("DB_HOSTNAME", "localhost"),
        "PORT": get_from_env("DB_PORT", "5432"),
        "OPTIONS": {
            "connect_timeout": 3,
            "options": f"-c statement_timeout={STATEMENT_TIMEOUT}ms",
        },
        # Keep database connections open for 1 minute
        "CONN_MAX_AGE": 60,
        # But ensure that persistent connections are healthy before using them
        "CONN_HEALTH_CHECKS": True,
    },
}

Неужели эта конфигурация больше не работает в psycopg 3? Или есть какие-то другие изменения в 3.x, которые могут означать большее количество таймаутов?

Все это делается с помощью синхронного Python, никакого async или чего-то еще.

Это, по-видимому, связано с ошибкой в psycopg 3.2. При использовании psycopg 3.1 все работает, как и ожидалось. На GitHub существует проблема, связанная с этой ошибкой: https://github.com/psycopg/psycopg/issues/888

Вернуться на верх