d821d392/crud/postgres.go
1970-01-01 00:00:00 +00:00

55 lines
1.4 KiB
Go

package crud
import (
"context"
"github.com/jackc/pgx/v5/pgxpool"
"time"
)
func CreatePostgresConnpool(dbUrl string) (*pgxpool.Pool, error) {
connPool, err := pgxpool.NewWithConfig(context.Background(), config(dbUrl))
if err != nil {
Error("Error while creating connection to the database!!", err)
return nil, err
}
connection, err := connPool.Acquire(context.Background())
if err != nil {
LogError("Error while acquiring connection from the database pool!! %v", err)
return nil, err
}
defer connection.Release()
err = connection.Ping(context.Background())
if err != nil {
LogError("Could not ping database")
return nil, err
}
return connPool, nil
}
func config(dbUrl string) *pgxpool.Config {
const defaultMaxConns = int32(4)
const defaultMinConns = int32(0)
const defaultMaxConnLifetime = time.Hour
const defaultMaxConnIdleTime = time.Minute * 30
const defaultHealthCheckPeriod = time.Minute
const defaultConnectTimeout = time.Second * 5
dbConfig, err := pgxpool.ParseConfig(dbUrl)
if err != nil {
Error("Failed to create a config, error: ", err)
return nil
}
dbConfig.MaxConns = defaultMaxConns
dbConfig.MinConns = defaultMinConns
dbConfig.MaxConnLifetime = defaultMaxConnLifetime
dbConfig.MaxConnIdleTime = defaultMaxConnIdleTime
dbConfig.HealthCheckPeriod = defaultHealthCheckPeriod
dbConfig.ConnConfig.ConnectTimeout = defaultConnectTimeout
return dbConfig
}