55 lines
1.4 KiB
Go
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
|
|
}
|