""" Connection pool для PostgreSQL (psycopg2). Lazy-init: пул создаётся при первом обращении к БД в каждом gunicorn-воркере. Переменные окружения (КАЖДАЯ отдельно): DB_HOST — хост DB_PORT — порт (5432) DB_NAME — имя БД DB_USER — пользователь DB_PASSWORD — пароль DB_SSLMODE — sslmode (require) """ import os import psycopg2 from psycopg2 import pool _pool = None def _dsn(): return ( f"host={os.getenv('DB_HOST')} " f"port={os.getenv('DB_PORT', '5432')} " f"dbname={os.getenv('DB_NAME')} " f"user={os.getenv('DB_USER')} " f"password={os.getenv('DB_PASSWORD')} " f"sslmode={os.getenv('DB_SSLMODE', 'require')}" ) def get_pool(): global _pool if _pool is None: if not os.getenv("DB_USER"): return None _pool = pool.ThreadedConnectionPool(1, 5, _dsn()) return _pool def get_conn(): p = get_pool() return p.getconn() if p else None def put_conn(conn): p = get_pool() if p and conn: p.putconn(conn)