Почему обновление до 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