SAN FRANCISCO — Brandon Belt hit a game-winning single in the ninth inning after Buster Posey tied the score with a two-run homer in the eighth, and San Francisco rallied to beat Arizona for its seventh straight victory at home.
Posey's drive to straightaway center was his second homer of the year, both in the past two days.
Belt's first career game-ending hit came against Tony Sipp (1-1), who allowed a leadoff single to Andres Torres. Brandon Crawford sacrificed him to second.
Jose Mijares struck out two in the ninth before yielding Cliff Pennington's double. Sergio Romo (1-1) relieved in a double switch as Belt entered at first base. Romo retired pinch-hitter Eric Hinske on a first-pitch grounder.
Diamondbacks pitcher Wade Miley hit his first career home run and Eric Chavez also connected.
Cardinals 3, Nationals 2
At Washington, Yadier Molina drove in the go-ahead run in the sixth inning, backing Shelby Miller's strong start as St. Louis returned to the site of their Game 5 NL division series victory last season with a victory over the Washington.
The other big hit for St. Louis was Allen Craig's two-run double in the third.
Miller (3-1) struck out eight in 62/3 innings, allowing two runs and four hits.
All the Cardinals' runs came against Dan Haren (1-3), who gave up three runs and six hits in five-plus innings.
Phillies 3, Pirates 2
At Philadelphia, Jimmy Rollins hit a tiebreaking single in the sixth inning and Jonathan Pettibone had an impressive major league debut to lead Philadelphia past Pittsburgh.
Pettibone allowed two runs and six hits, striking out six in 51/3 innings. Raul Valdes (1-0) got two outs in the sixth and Jonathan Papelbon finished for his fourth save.
Pedro Alvarez and Russell Martin hit solo homers for the Pirates on a chilly night when the temperature dipped below 50 degrees.
Reds 5, Cubs 4, 13 innings
At Cincinnati, Jay Bruce hit a tying double and scored on Cesar Izturis' two-out single in the 13th inning, rallying Cincinnati to a victory that gave Chicago its fourth straight loss.
Luis Valbuena hit a two-run homer in the top of the 13th off Alfredo Simon (2-1) for a 4-2 Cubs lead.
Michael Bowden (0-1) couldn't hold it. He gave up a single by Xavier Paul, Brandon Phillips' double and Bruce's two-run double that tied it.
Izturis' single past diving shortstop Starlin Castro sent the Reds to their seventh victory in eight games on their homestand.
Brewers 7, Padres 1
At San Diego, Ryan Braun hit a two-run homer and Yuniesky Betancourt had a three-run shot off Jason Marquis in the first inning to help Milwaukee beat San Diego for its eighth straight victory.
Kyle Lohse (1-1) went five innings, allowing one run and five hits, but left in the sixth after dislocating his left pinkie on a play at first base. He said he expects to make his next start.
Red Sox 9, Athletics 6
At Boston, Mike Napoli hit a grand slam and drove in five runs, Will Middlebrooks busted out of a slump with a three-run homer and Boston rebounded from a doubleheader sweep by beating Oakland.
The Red Sox, swept by Kansas City Sunday, scored three runs in the fourth and five in the fifth. Napoli's fourth career slam keyed the five-run fifth and helped end Oakland's eight-game winning streak against Boston.
The Athletics dropped their season-high fourth straight.
Felix Doubront (2-0) allowed three runs on three hits, walking five. He also threw two wild pitches and struck out eight in 62/3 innings.
Rangers 7, Angels 6
At Anaheim, Calif., A.J. Pierzynski hit a tiebreaking homer with two outs in the ninth inning, and Texas rallied from a late three-run deficit for a 7-6 win over the Angels.
Mitch Moreland had three hits and drove in a run for the Rangers, who also got three hits from Elvis Andrus in their fourth consecutive victory, snapping the Angels' three-game winning streak.
Chris Iannetta doubled in the go-ahead run and Luis Jimenez got his first career RBIs on a two-run single while the Angels took a 6-3 lead in the sixth inning, but Texas tied it with three runs in the seventh.
Orioles 2, Blue Jays 1
At Baltimore, Nick Markakis singled home the winning run with two outs in the bottom of the ninth inning, giving the Orioles a victory over the Blue Jays.
Toronto reliever Aaron Loup (1-2) began the ninth by hitting Chris Davis with a pitch. After a sacrifice bunt, Steve Pearce popped out and Nolan Reimold received an intentional walk before Alexi Casilla reached on a throwing error by shortstop Munenori Kawasaki that loaded the bases.
Rays 5, Yankees 1
At St. Petersburg, Fla., Matt Moore became the first Rays pitcher to win his first four starts of a season, Ryan Roberts homered twice and Tampa Bay beat CC Sabathia and the Yankees.
Moore (4-0) allowed one run, two hits, three walks and had nine strikeouts over eight innings. Roberts connected in the first and third to help the Rays take an early 5-0 lead.
Indians 3, White Sox 2
At Chicago, Asdrubal Cabrera hit a clutch two-run single in his return to the lineup and the Indians used a throwing error by reliever Matt Thornton to rally for a victory over the White Sox.
Justin Masterson (4-1) pitched seven effective innings to help the Indians win their third straight. They have won three of four this season against the White Sox.
Mariners 7, Astros 1
At Houston, Felix Hernandez pitched six scoreless innings for his 100th career win and Seattle homered three times to back him up in a victory over the Astros
Hernandez (2-2) reached the milestone in his fourth try to join Jamie Moyer (145) and Randy Johnson (130) as the only pitchers to reach 100 wins with the Mariners.
Hernandez allowed five hits and struck out nine to lower his ERA to 2.08.
Kyle Seager, Jesus Montero and Kendrys Morales all homered for the Mariners, who snapped a three-game losing streak.
Rick Ankiel hit a solo homer in the seventh inning for the Astros, who dropped to 5-14 — the second-worst start in franchise history, according to STATS. They opened 4-20 in 1969. Houston starter Brad Peacock (1-2) yielded nine hits and seven runs — both season highs — in 41/3 innings.