Updated

Edinson Volquez pitched seven effective innings and the San Diego Padres extended their winning streak to a season-high seven games with a 5-4 victory over the Arizona Diamondbacks on Sunday.

The Padres roughed up Trevor Cahill (9-11) and had at least 10 hits for the sixth time in eight games to complete their second sweep in the desert this season. Volquez (9-9) recovered after a shaky first inning and San Diego's bullpen escaped some sketchy moments of its own to win its sixth straight over Arizona.

Aaron Hill hit a two-run homer off Brad Brach in the eighth to pull Arizona within one, but Luke Gregerson escaped a jam to finish off the inning and pitched a perfect ninth for his first save since 2010.

Cahill has been plagued by slow starts and Sunday was no different.

Moved up in the rotation after Arizona traded left-hander Joe Saunders to Baltimore, he opened with a couple of groundouts before giving up a single to Chase Headley. Cahill then walked Carlos Quentin to set up Yasmani Grandal's run-scoring single and Yonder Alonso made it 2-0 with another single.

The right-hander drew a few boos from the home crowd after walking Mark Kotsay to load the bases before ending the threat with a groundout. He needed 32 pitches to get through the first inning and has allowed 19 runs in the opening frame in 26 starts.

Cahill had more two-out problems in the third inning, giving up a run-scoring single to Kotsay after hitting Grandal with a pitch and Alonso's single. He allowed another run in the fourth on a single by Quentin that made it 4-2 and was done after walking Grandal to load the bases with two out in the inning.

The Padres had eight hits off Cahill, who allowed at least four runs for the third time in four starts. They finished with 11 hits for the game.

Volquez had similar first-inning problems, giving up two-out RBI singles to Miguel Montero and Chris Young.

The right-hander settled into a groove after that, allowing one hit over the next six innings. He allowed two runs and four hits for his second straight quality start after allowing at least four runs in four straight outings.

The Padres gave Volquez plenty of defensive help, particularly second baseman Alexi Amarista. He made several spectacular stops, the best of the bunch coming in the second inning, when he ranged behind the bag and made a jump throw to get Jake Elmore by a half-step at first.

Shortstop Everth Cabrera also made a spectacular dive and throw to rob Justin Upton of a hit in the eighth inning after Hill's 20th homer cut San Diego's lead to 5-4.

Gregerson struck out Chris Johnson with runners on second and third in the eighth while extending his scoreless streak to 22 games, and made a diving stop to get pinch-hitter Jason Kubel for the second out in the ninth.

NOTES: A three-man umpire crew officiated the game after crew chief Tim Tschida, who was slated to work third base, was scratched due to "personal medical reasons." ... Upton extended his home hitting streak to 19 games with a single in the first inning. ... Arizona LHP Tyler Skaggs, Monday's starter against Cincinnati, earned the win in his major league debut on Wednesday after allowing two runs in 6 2-3 innings against Miami. ... RHP Casey Kelly will make his major league debut for the Padres on Monday night against Atlanta. He was part of the 2010 trade that sent first baseman Adrian Gonzalez to Boston.