package db import ( "context" "fmt" "log" "os" "time" "github.com/jackc/pgx/v5/pgxpool" ) func NewPool(ctx context.Context) (*pgxpool.Pool, error) { connStr := os.Getenv("DATABASE_URL") if connStr == "" { return nil, fmt.Errorf("DATABASE_URL environment variable is not set") } config, err := pgxpool.ParseConfig(connStr) if err != nil { return nil, fmt.Errorf("unable to parse DATABASE_URL: %w", err) } config.MaxConns = 100 config.MinConns = 10 config.MaxConnLifetime = time.Hour config.MaxConnIdleTime = time.Minute config.HealthCheckPeriod = 5 * time.Second pool, err := pgxpool.NewWithConfig(ctx, config) if err != nil { return nil, fmt.Errorf("unable to create connection pool: %w", err) } err = pool.Ping(ctx) if err != nil { pool.Close() return nil, fmt.Errorf("unable to ping database: %w", err) } log.Println("Database connection pool successfully initialized.") return pool, nil } func ClosePool(pool *pgxpool.Pool) { if pool != nil { pool.Close() log.Println("Database connection pool closed.") } }