2025-05-02 15:12:18 +07:00

37 lines
742 B
Go

package database
import (
"context"
"database/sql"
"fmt"
"time"
_ "github.com/lib/pq"
)
type Config struct {
MaxOpenConns int
MaxIdleConns int
ConnMaxLifetime time.Duration
ConnMaxIdleTime time.Duration
}
func NewPostgresConnection(connStr string, cfg Config) (*sql.DB, error) {
db, err := sql.Open("postgres", connStr)
if err != nil {
return nil, fmt.Errorf("failed to open database connection: %w", err)
}
db.SetMaxOpenConns(cfg.MaxOpenConns)
db.SetMaxIdleConns(cfg.MaxIdleConns)
db.SetConnMaxLifetime(cfg.ConnMaxLifetime)
db.SetConnMaxIdleTime(cfg.ConnMaxIdleTime)
err = db.PingContext(context.Background())
if err != nil {
return nil, fmt.Errorf("failed to ping database: %w", err)
}
return db, nil
}