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 }