The Pirates' left-hander, pitching for the first time since July 25, struck out a career-high nine in seven innings to lead Pittsburgh to a 8-3 victory over the sloppy Diamondbacks.
"Everything just kind of clicked," Gorzelanny said. "My pitches were diving, I threw my change-up well and my two-seamer was moving. I was placing my fastball where I wanted it."
Gorzelanny (10-6) allowed four hits, three of them by the 19-year-old Upton, brought up from Double-A Mobile last Thursday.
Upton tripled in the second, homered in the fourth and doubled in the seventh. He grounded out to second to end the game.
"I'll tell you right now," Arizona's Orlando Hudson said. "You might want to start rewriting the records and putting his name right below A-Rod and Griffey when they were 19."
The 25-year-old Gorzelanny had not pitched since leaving after three innings because of shoulder stiffness against the Mets in New York on July 25.
"It was really good to see our guy bounce back and pitch in the manner in which he did," Pittsburgh manager Jim Tracy said. "He was really good tonight."
"We have games where we don't play very well," Arizona manager Bob Melvin said. "We got beat 14-0 and 11-0. We've got a younger group and sometimes they make mistakes that stick out."
Hudson homered for Arizona, which lost for only the third time in 16 games. The Diamondbacks' lead in the NL West slipped to one game.
Eric Byrnes, who signed a three-year, $30 million contract extension earlier in the day, was robbed of a two-run home run and dropped a fly ball.
Upton tripled to the left-center gap in his first at-bat at Chase Field, then scored on Chris Snyder's slow grounder up the middle.
The shortstop Wilson mishandled the ball for an error, but Snyder got an RBI because Upton would have scored anyway.
A throwing error by Arizona starter Micah Owings (5-6) aided the Pirates' three-run fourth inning. Ryan Doumit drew a one-out walk. Bautista hit a high bouncer off the plate that Owings retrieved, but his off-balance throw sailed far over first baseman Conor Jackson's head, leaving runners at second and third.
Paulino singled in both runs, then scored on Wilson's double to put Pittsburgh up 3-1.
Upton's first big league home run, into the left-field seats on an 0-1 pitch with two outs in the fourth, cut it to 3-2.
The Pirates added another in the sixth. Wilson led off with a double, went to third on Gorzelanny's sacrifice bunt, then scored on Nate McLouth's sacrifice fly.
After Upton doubled leading off the seventh, left fielder Jason Bay made a leaping catch at the wall to take away what would have been the game-tying home run by Byrnes.
"We were six inches away from being 4-4 and being back in the game," Melvin said.
- Gorzelanny picked off Young at first in the third inning.
- Upton, playing in right field, missed the cutoff man on Paulino's two-run single, allowing the runner to advance to second.
- The center fielder Young and shortstop Stephen Drew made consecutive strong defensive plays in the sixth, one a shoestring catch and the other a stab of a hard one-bouncer.
- Arizona 3B Mark Reynolds struck out three times. He has fanned 74 times in 214 at-bats.