Jeff Keppinger hit a tiebreaking homer with two out in the ninth inning and the Houston Astros rallied to beat the St. Louis Cardinals 4-3 on Thursday, avoiding a three-game sweep.
Jose Valverde (2-2) pitched two scoreless innings for the Astros, who won for only the fifth time in their last 19 road games. They avoided a second three-game sweep in St. Louis this season.
Matt Holliday homered for the NL Central-leading Cardinals, who lost for only the fourth time in 19 games. St. Louis had won four straight overall.
The Astros tied it on Darin Erstad's RBI double off Kyle McClellan (4-3) in the eighth, spoiling Chris Carpenter's bid for his 15th win. Keppinger's fourth homer and first in 116 at-bats since June 19 at Minnesota barely cleared the left-field wall. Holliday made a try for it but the ball appeared to sneak under Holliday's outstretched glove.
Ryan Ludwick's two-run single off Brian Moehler in the sixth, only his third hit in 17 at-bats against the right-hander, put the Cardinals ahead 3-2. Holliday's 18th homer came in the second and was his seventh in 31 games with St. Louis.
Rescued by Erstad's hit, Moehler remained 5-0 against the Cardinals over 10 starts. He's one of only five pitchers and the only active one with 60 or more innings and no losses against St. Louis.
Kaz Matsui and Michael Bourn each drove in a run in the second for the Astros. Matsui doubled in Carlos Lee before Carpenter set up Bourn's RBI single with consecutive walks to eighth-place hitter Chris Coste and Moehler.
Carpenter finished the third with strikeouts of Miguel Tejada and Carlos Lee, the third- and fourth-toughest batters to fan in the NL, and the Astros totaled two hits his final four innings. He allowed five hits total before leaving after the sixth.
Moehler allowed three runs and six hits in six innings for Houston.
NOTES: Astros INF Geoff Blum, scratched from Wednesday's lineup due to a shoulder spasm, returned to Houston to be examined. ... Khalil Greene hasn't had an at-bat since Aug. 20. He was announced as a pinch hitter in the seventh then replaced by Rick Ankiel after the Astros changed relievers.