package postgres import ( "context" "database/sql" "errors" "fmt" "time" ) // Ping bounds db.PingContext under timeout and returns a wrapped error so // startup failures are easy to spot in service logs. // // timeout is typically taken from Config.OperationTimeout. func Ping(ctx context.Context, db *sql.DB, timeout time.Duration) error { if db == nil { return errors.New("ping postgres: nil db") } if timeout <= 0 { return errors.New("ping postgres: timeout must be positive") } pingCtx, cancel := context.WithTimeout(ctx, timeout) defer cancel() if err := db.PingContext(pingCtx); err != nil { return fmt.Errorf("ping postgres: %w", err) } return nil }