package db import ( "context" "fmt" "time" "github.com/jackc/pgx/v5/pgxpool" ) func Connect(ctx context.Context, dsn string) (*pgxpool.Pool, error) { var pool *pgxpool.Pool var err error for i := range 10 { pool, err = pgxpool.New(ctx, dsn) if err == nil { if pingErr := pool.Ping(ctx); pingErr == nil { return pool, nil } pool.Close() } wait := time.Duration(i+1) * 500 * time.Millisecond fmt.Printf("db not ready, retrying in %s...\n", wait) time.Sleep(wait) } return nil, fmt.Errorf("could not connect to database after retries: %w", err) }