package database import ( "context" "database/sql" "fmt" "time" _ "github.com/lib/pq" ) type Postgres struct { db *sql.DB } func NewPostgres(dsn string) (*sql.DB, error) { db, err := sql.Open("postgres", dsn) if err != nil { return nil, fmt.Errorf("failed to open db: %w", err) } // Проверяем соединение ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := db.PingContext(ctx); err != nil { return nil, fmt.Errorf("failed to ping db: %w", err) } // Настройка пула соединений db.SetMaxOpenConns(25) db.SetMaxIdleConns(25) db.SetConnMaxLifetime(5 * time.Minute) return db, nil }