Carl Pavano make one key mistake, and that was all James Shields needed.

Shields carried a three-hitter into the ninth inning, B.J. Upton had a key two-run single and the Tampa Bay Rays beat the Minnesota Twins 4-1 on Saturday night.

"A tough night at the plate, but guys like that do that to you," Minnesota manager Ron Gardenhire said. "We were facing a very, very good pitcher out there, Mr Shields. He was really, really good. He's a gamer. He dominated us."

Shields (3-0) allowed one run and five hits over eight-plus innings while winning his third consecutive start after getting a no-decision on opening day against the New York Yankees.

"I thought it was a good pitcher's duel, going back and forth," Pavano said. "Overall, we were in it until the end."

Upton's two-out hit off Pavano (1-2) gave the Rays a 3-0 lead in the sixth. Another run scored on the play when center fielder Denard Span was charged with a throwing error attempting to cut down Matt Joyce at third.

"That was the deciding factor," Pavano said. "I left a pitch up and he jammed shot it into center field."

Pavano gave up three runs and seven hits in six innings. He threw 110 pitches.

"They made him work really hard," Gardenhire said. "He gave a great chance to win, it was just the other guy on the other side really didn't let us do anything. Carl went toe to toe with him, then finally cracked there a little bit."

Josh Willingham singled in the ninth to tie Kirby Puckett's team record, set in 1994, of starting a season with a 15-game hitting streak.

Tampa Bay has won its last nine home games — dating to July 21 — when Shields was the starting pitcher. Shields is 7-0 over the stretch.

Shields was pulled in the ninth after allowing Willingham's hit and a double by Justin Morneau. Ryan Doumit had a sacrifice fly off Fernando Rodney, who picked up his fifth save.

Aided by two errors and a hit batter, Tampa Bay took a 4-0 lead in the seventh on Evan Longoria's grounder. Longoria has seven RBIs over the past three games.

The Twins were 0 for 5 with runners in scoring position against Shields. The right-hander threw 29 pitches during the sixth, but got out of a bases-loaded jam when Doumit lined to third for the final out of the inning.

Pavano induced a double-play grounder from Upton with runners on first and third in the fourth, ending the threat. One inning later, Joe Mauer, playing first base, made a diving catch on Desmond Jennings' one-out squeeze bunt and doubled Jose Molina off third.

Mauer had two hits in four at-bats, and is 33 for 74 overall at Tropicana Field.

NOTES: Morneau finished 1 for 3 with a walk after not playing Friday night because of a sore right foot. "Still got a little soreness in his foot, but he ready's to get back out there," Gardenhire said. Morneau fouled a ball off the foot Thursday. ... Twins LHP Francisco Liriano (0-2) will go against RHP Jeff Niemann (0-2) in the series finale Sunday. "If he has his fastball command, look out," Rays manager Joe Maddon said of Liriano. ... Pavano's seven strikeouts were his most since he had seven on April 14, 2011 against the Rays.