ST. LOUIS -- Justin Upton put his 50-minute rest to good use Thursday night.
The Arizona outfielder charged out of the gate after a rain delay to hit a two-run homer and Joe Saunders threw five scoreless innings to lead the Diamondbacks to a 4-1 victory over the St. Louis Cardinals.
The Diamondbacks won for the fourth time in the last six games and remained two games behind first-place San Francisco in the NL West.
Upton slammed the sixth pitch from St. Louis starter Kyle McClellan (6-6) following the weather stoppage to put the Diamondbacks in front 3-0.
St. Louis, which lost for the fourth time in six games, fell into a first-place tie with Milwaukee in the NL Central.
Saunders allowed one hit, struck out one and walked four. He was removed from the game after the rain delay in the sixth inning.
McClellan, meanwhile, returned to the game. Just over two minutes after the resumption of play, Upton drilled his 15th homer of the season into the stands in left field.
Upton said his ability to remain focused during the time off helped at the plate.
"We were able to stay in the mode and not come in here (in the locker room) and sit down," he said. "We stayed in the cage area and the dugout so we wouldn't get too laid back."
That strategy worked perfectly.
"He just crushed it," Arizona manager Kirk Gibson said of the 406-foot blast. "It really got out in a hurry."
Saunders never allowed a runner to get to second base over his final four innings. He retired nine in a row at one point.
"I made some good pitches against some good hitters," Saunders said. "And the defense was awesome. They turned in some big double plays."
Saunders, like McClellan, wanted to stay in the game after the delay. But Gibson convinced him otherwise.
"I definitely would have loved to have gone back in," he said. "It was my first career rain delay and it was probably better to err on the side of caution."
McClellan (6-6) has not won since May 19, covering his last six starts. He gave up four runs, three earned, and six hits in seven innings. He did not appear as strong after the delay.
"If I didn't feel like I could do it," McClellan said, "I wouldn't have gone out there. They asked me to give them an honest opinion and I felt good warming up and I felt like I was fine."
St. Louis climbed within 3-1 on a run-scoring double by Holliday in the sixth. Reliever Micah Owings, who came into the game after the stoppage, then struck out Lance Berkman and got Yadier Molina to fly out.
Roberts added an RBI single in the seventh to make it 4-1.
David Hernandez pitched the ninth and picked up his sixth save in seven opportunities. Alberto Castillo, Yhency Brazoban and Owings followed Saunders to the mound. The five pitchers combined to allow three hits.
Arizona pushed across an unearned run in the second. Chris Young led off with a single and eventually scored on a sacrifice fly by Sean Burroughs. Young, moved to third on a throwing error when Freese tossed a grounder wide at second base in an effort to get Young on a one-out grounder by Xavier Nady. Young has hit safely in nine of his last 11 road games.
"The whole game was not a standout game," St. Louis manager Tony La Russa said. "Not much to say."
Pujols, the three-time league MVP, was 0 for 3 in his second game since returning from the disabled list with a fractured left wrist. He is 1 for 9 over the two games.
The start of the game was delayed 66 minutes by rain.
Pujols grounded into his NL-leading 19th double play in the fourth inning. ... Theriot committed his 15th error of the season in the third inning booting a ground ball by Saunders. ... Berkman has four homers and 10 RBIs in four games against Arizona this season, the most RBIs by any player against the Diamondbacks. ... Arizona has had 70 games decided by four runs or less this season. They are 39-31 in those games. ... The Diamondbacks are 4-7 in their last 11 games in St. Louis.