HOUSTON -- Taylor Buchholz was so happy about his first major league win that he quickly forgave the teammate who might have kept him from finishing a shutout.
There were two outs in the ninth when Chris Duffy reached on an error by second baseman Eric Bruntlett. Jack Wilson followed with a single, and Buchholz was lifted for All-Star closer Brad Lidge after 104 pitches.
"I feel bad that I took that away from him," Bruntlett said. "I went and found him and asked him if he could forgive me."
"No problem," he said. "I know he's a great infielder and he won't usually make a mistake like that."
The 24-year-old rookie allowed only singles by Jeromy Burnitz in the fifth inning and Wilson in the ninth. He struck out five and walked none in his second career start and fourth appearance.
Buchholz said the win exceeded any visions he had of how he would get his first win.
"I never would have expected (it) to be a two-hitter," he said. "But it's definitely a great feeling to get that out of the way. I'm on a high right now. I'm not going to lie, it's a great feeling."
Buchholz (1-1) retired his first nine batters before hitting Duffy on the foot with a pitch in the fourth. But Wilson grounded into a double play, and the right-hander kept cruising along.
With Buchholz bouncing in the dugout as he watched, Lidge struck out Jason Bay on a 3-2 pitch for his seventh save in seven tries.
Lidge talked about his troubles with Bay, who homered against him last season.
"I didn't want to pitch in this game," Lidge said. "I wasn't expecting to. I felt a little emotion because Taylor had thrown such a great game and I wanted to make sure I left everything out there against Bay tonight. Fortunately I was able to get him."
Astros manager Phil Garner said he didn't consider leaving Buchholz in with two runners on base.
"He had pitched too good of a game to have it slip away," Garner said. "So give it to the guy that's supposed to finish the game out. He'll have a whole bunch more opportunities to finish those kind of games out."
Morgan Ensberg had an RBI single in the first and Lance Berkman added a sacrifice fly in the fifth after Biggio hit his 611th career double. Biggio went 3-for-5, his fourth three-hit performance in the last five games.
Ensberg's franchise-record streak of six straight games with a home run ended as he went 1-for-2 with two walks.
Pirates starter Ian Snell (0-2) allowed six hits and two runs with four strikeouts in six innings, giving him his first quality start. It was a much better outing than his last game, when he gave up six runs and six hits in five innings of a 7-3 loss to the Chicago Cubs.
"It was a big game for me," Snell said. "Just to show myself that I can be here, pitch to big league hitters, get them out and throw my fastball and other pitches."
Pirates manager Jim Tracy said Snell would have lasted longer, but he was forced to take him out because of a cramp in his calf.
"It was the best Snell has done," Tracy said. "I'm beginning to see some progress from him. He threw enough breaking balls for strikes. He had much better command of his fastball tonight."
- The win puts the Astros over .500 with an all-time record of 3,509-3,508.
- Snell's only major league win came last season when he allowed three hits in eight innings of a 7-0 win over Roger Clemens and the Astros.
- Snell does not have a major league hit. He went 0-for-2, which puts his career numbers at 0-for-14 with three sacrifice bunts.
- Bay's streak of reaching base safely in 16 straight games ended as he went 0-for-4.