Files
jules/db/postgres/postgres.go
T

41 lines
723 B
Go

package postgres
import (
"context"
"database/sql"
"fmt"
"time"
_ "github.com/lib/pq"
)
type DB struct {
conn *sql.DB
}
func New(connString string) (*DB, error) {
conn, _ := sql.Open("postgres", connString)
conn.SetMaxOpenConns(25)
conn.SetMaxIdleConns(5)
conn.SetConnMaxLifetime(5 * time.Minute)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := conn.PingContext(ctx); err != nil {
conn.Close()
return nil, fmt.Errorf("ping database: %w", err)
}
if err := runMigrations(conn); err != nil {
conn.Close()
return nil, fmt.Errorf("run migrations: %w", err)
}
return &DB{conn: conn}, nil
}
func (db *DB) Close() error {
return db.conn.Close()
}