CINCINNATI -- Michael McKenry was prepared for the ultimate fastball.
Pittsburgh's reserve catcher caught up with one of Aroldis Chapman's blink-of-an-eye fastballs and ended the reliever's season-long streak of not allowing an earned run, hitting an RBI double in the 10th inning Thursday night for a 5-4 victory over the Cincinnati Reds.
Chapman (4-1) hadn't allowed an earned run in a club-record 24 appearances covering 29 innings. He came in to start the 10th with a 0.00 ERA and gave up a leadoff double by Clint Barmes -- only the eighth hit off the left-hander all season.
McKenry, batting only .193, knew what was coming next.
"He's a special guy with a special arm," McKenry said. "You've got to prepare for the 100 mph fastball. You can't think about anything else."
The catcher's double to right field off a 99 mph pitch allowed the Pirates to pull out a game they almost let get away.
"McKenry hit a real good pitch," Reds manager Dusty Baker said. "If you catch up to Chapman's fastball, you're going to hit it hard somewhere."
McKenry also had a sacrifice fly for a 4-3 lead in the seventh, but closer Joel Hanrahan (3-0) blew a save for only the second time this season, giving up a leadoff homer to Ryan Ludwick in the ninth.
Chris Resop got his second major league save, allowing the Pirates to take two of three in the series against the NL Central leaders. Resop got Ludwick on a called third strike with two runners aboard, completing Pittsburgh's ninth win in 12 games.
This one might have been the best of all.
"Probably as satisfying a win as I've had since I've been here for the ballclub," manager Clint Hurdle said.
McKenry figured in the Pirates' biggest moments in a back-and-forth game.
His sacrifice fly in the seventh took advantage of Gold Glove second baseman Brandon Phillips' blunder. Phillips turned his back to the infield after getting an out at first on a sacrifice, allowing Jose Tabata to go from first to third on the play. McKenry drove him in.
Pittsburgh's bullpen ranks second in the NL to Cincinnati's and had blown only three save chances, fewest in the league.
Ludwick hit Hanrahan's first pitch into the upper deck to tie it. Hanrahan came into the game 15 of 16 in save chances, having converted 10 in a row since his other missed opportunity May 8.
The Pirates' bench erupted when McKenry came through again in the 10th to regain the lead and end Chapman's streak without allowing an earned run.
"We knew his numbers," said reliever Jared Hughes, who escaped a threat in the sixth. "We were really excited on the bench when that happened.
"That was awesome -- maybe the best team win all year."
Bruce led off the second inning with his 13th homer. At least one homer has been hit in each of the last 53 games at Great American Ball Park since last July 29, the longest such streak since there were 63 straight games with a homer at Philadelphia's Citizens Bank Park in 2007-08, according to STATS LLC.
Cincinnati's Joey Votto doubled in the first inning, extending his hitting streak to 13 games, one shy of his career high. Tabata threw Votto out at the plate when he tried to score on Phillips' single to right field.
Alex Presley doubled, singled and scored a pair of runs batting atop the Pirates' order. Presley, called up at the start of the series to bat leadoff, went 5 of 14 and scored three runs as Pittsburgh won its fifth straight series.
Garrett Jones drove in two runs for Pittsburgh with a sacrifice fly and a single.
The Pirates play their next 15 games against American League teams, starting with three at PNC Park against Kansas City. The Reds host a three-game weekend series against Detroit, making its first trip to Cincinnati since 2001. ... Pittsburgh is 16-10 in one-run games. ... Pirates 3B Pedro Alvarez was back in the lineup after sitting out a few games. He broke an 0-for-18 slump with a pinch-hit single on Wednesday. ... Reds 3B Scott Rolen took batting practice for the second consecutive day. Rolen has been on the DL with an inflamed left shoulder since May 12. There's no timetable for his return. ... Reds CF Drew Stubbs missed his second straight game with pulled muscles in his left side. He said the injury was improving.