Files
3ybactuk-marketplace-go-ser…/loms/internal/infra/db/postgres/postgres.go
Никита Шубин 4396bebe80 [hw-7] add metrics, tracing
2025-07-26 14:15:40 +00:00

61 lines
1.2 KiB
Go

package postgres
import (
"context"
"github.com/jackc/pgx/v5/pgxpool"
"github.com/pkg/errors"
)
// From https://gitlab.ozon.dev/go/classroom-18/students/week-4-workshop/-/blob/master/internal/infra/postgres/postgres.go
func NewPool(ctx context.Context, dsn string) (*pgxpool.Pool, error) {
config, err := pgxpool.ParseConfig(dsn)
if err != nil {
return nil, errors.Wrap(err, "pgxpool.ParseConfig")
}
config.ConnConfig.Tracer = promTracer{}
pool, err := pgxpool.NewWithConfig(ctx, config)
if err != nil {
return nil, errors.Wrap(err, "pgxpool.NewWithConfig")
}
return pool, nil
}
func NewPools(ctx context.Context, DSNs ...string) ([]*pgxpool.Pool, error) {
pools := make([]*pgxpool.Pool, len(DSNs))
for i, dsn := range DSNs {
cfg, err := pgxpool.ParseConfig(dsn)
if err != nil {
closeOpened(pools[:i])
return nil, errors.Wrap(err, "pgxpool.ParseConfig")
}
cfg.ConnConfig.Tracer = promTracer{}
pool, err := pgxpool.NewWithConfig(ctx, cfg)
if err != nil {
closeOpened(pools[:i])
return nil, errors.Wrap(err, "pgxpool.NewWithConfig")
}
pools[i] = pool
}
return pools, nil
}
func closeOpened(pools []*pgxpool.Pool) {
for _, p := range pools {
if p != nil {
p.Close()
}
}
}