package database import ( "context" "fmt" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" "time" ) func CreateConnectionPool(parentContext context.Context, databaseURL string) (*pgxpool.Pool, error) { poolConfiguration, parseError := pgxpool.ParseConfig(databaseURL) if parseError != nil { return nil, fmt.Errorf("failed to parse database URL: %w", parseError) } poolConfiguration.MaxConns = 25 poolConfiguration.MinConns = 5 poolConfiguration.MaxConnLifetime = 30 * time.Minute poolConfiguration.MaxConnIdleTime = 5 * time.Minute poolConfiguration.HealthCheckPeriod = 30 * time.Second poolConfiguration.ConnConfig.DefaultQueryExecMode = pgx.QueryExecModeExec connectionPool, connectionError := pgxpool.NewWithConfig(parentContext, poolConfiguration) if connectionError != nil { return nil, fmt.Errorf("failed to create connection pool: %w", connectionError) } pingError := connectionPool.Ping(parentContext) if pingError != nil { connectionPool.Close() return nil, fmt.Errorf("failed to ping database: %w", pingError) } return connectionPool, nil }