Once again, the San Diego Padres couldn't come up with timely hits.
The Pirates snapped a nine-game losing streak to San Diego dating to 2009. They've won four of six overall, including consecutive games for the first time since April 17-18.
The Padres, coming off two straight wins at Dodger Stadium, still haven't won three straight this season. San Diego had the potential tying run on third base with two outs in the ninth before Will Venable hit into a force play.
"We need to do that to win games. It's a big part of winning baseball, the timely hitting," Padres manager Bud Black said. "I think you'll see averages continue to rise. We still have a lot of guys below their norm. If they rise, some of those will be in the clutch."
The Padres wore their camouflage jerseys to honor the military a day after President Barack Obama announced that terrorist leader Osama bin Laden was killed by U.S. forces in Pakistan. The Padres normally wear the jerseys for Sunday home games. They gave two free tickets to any active or retired military personnel who showed proper ID.
McDonald (2-2) allowed two runs and five hits in six innings, struck out five and walked one. Joel Hanrahan pitched the ninth for his ninth save in nine chances.
The Pirates hit Aaron Harang (4-2) hard in the first inning to take a 4-0 lead, and the pitcher hurt himself with an error.
Xavier Paul singled with one out and Jones followed with a shot into the seats down the right-field line, his sixth. Neil Walker singled and advanced to third on Harang's errant pickoff throw to first with two outs. Snyder followed with a shot into the left-field seats, his first.
Six of San Diego's 17 errors this season have been by starting pitchers.
"I felt I was making good pitches after the first inning," Harang said. "I settled in, was executing. The sinker was working, keeping them off balance. But the first inning, I felt like the one bad pitch that I didn't execute there, there'd probably be a different outcome of the game."
McDonald allowed Jorge Cantu's two-run homer into the balcony on the second deck of the Western Metal Supply Co. brick warehouse in the left-field corner with two outs in the sixth, his second. Jason Bartlett was aboard on a one-out single.
San Diego pulled to 4-3 with two outs in the eighth when Ryan Ludwick's single brought in Venable, who reached on an infield single and stole second. Ludwick went to second on a wild pitch and Cantu walked, but Cameron Maybin hit into a force play to end the threat.
San Diego's Brad Hawpe was thrown out at the plate trying to score on pinch-hitter Eric Patterson's fly to right to end the fifth.
"That was a big play, no doubt about it," Pirates manager Clint Hurdle said. "If we don't get that out right there, we could still be playing baseball and the game would have looked a lot different from that inning on."
The Pirates loaded the bases with three straight walks with one out in the ninth before Luke Gregerson struck out pinch-hitter Steve Pearce and got Andrew McCutchen to hit into a force.
Harang went five innings, allowing four runs and five hits with four strikeouts and two walks.
NOTES: Padres C Nick Hundley stumbled into Pittsburgh's dugout after dropping a foul ball by Jones in the eighth inning and one of the Pirates saved him from falling. 3B Cantu tumbled into a photo well next to the Pirates' dugout after dropping a foul ball during the same at-bat and broke his belt. Trainer Todd Hutcheson brought out a new one, but Cantu didn't put it on. ... Padres reliever Joe Thatcher had exploratory arthroscopic surgery on his strained left shoulder. The lefty is expected to begin a throwing program in six weeks. He began the season on the disabled list. Black said Thatcher could pitch this season if his rehab goes well. ... Triple-A shortstop Everth Cabrera, who was with the Padres the last two seasons, broke the hamate bone in his right hand and will be out for six weeks.