Matt Holliday drove in three runs with a pair of two-out singles, Albert Pujols homered and the St. Louis Cardinals rallied Sunday to complete their first four-game series sweep on the road since 2004 by beating the Florida Marlins 8-4.

In a single series, the Cardinals matched their longest winning streak of the season.

Pujols hit his third home run of the series and his 27th this season, and his intentional walk backfired on the Marlins in the sixth inning, when Holliday followed with a tying single. The Marlins then intentionally walked Lance Berkman, and Jon Jay foiled that strategy with a two-run single.

After Florida tied the game, the Cardinals went ahead to stay with three unearned runs in the seventh after a throwing error by shortstop Emilio Bonifacio. Ryan Theriot's RBI single put St. Louis up 5-4, and Holliday added a two-run single.

It was the final game in the Marlins' current home for the Cardinals, and their record in the stadium is 45-27, best in the NL.

This season the Marlins are having trouble beating anybody in Miami, where they're 24-36. On the road they're 31-23.

Florida was swept in a four-game series at home for the second time in two months. It also happened against Milwaukee on June 3-6.

The Marlins' new ballpark opening next season will have a retractable roof, and neither the home team nor the visitors will miss dealing with South Florida's wet summer weather. The start of the game was delayed 81 minutes by rain, and drizzle fell throughout the final few innings.

Florida's Bryan Petersen hit his first major league homer, a two-run shot that tied the game when he pinch-hit with two out in the sixth.

The pitchers of record were a bit misleading. Mitchell Boggs (2-3) received credit for the victory despite giving up Petersen's homer in the only inning he worked. Mike Dunn (5-6) took the loss even though he didn't allow an earned run — the two runs charged against him were unearned because of Bonifacio's error.

The Cardinals' Jaime Garcia departed for after five innings trailing 2-1.

Florida's Javier Vazquez allowed four runs in six innings. He scored a run and had two hits, including a double for his first extra-base hit since 2009.

St. Louis scored three times in the sixth to take a 4-2 lead. Corey Patterson, pinch-hitting for Garcia, led off with a popup to shallow left, and the ball fell for a double after Bonifacio and left fielder Logan Morrison nearly collided trying to make the catch.

With two out, Marlins manager Jack McKeon ordered Pujols intentionally walked, and Holliday followed with a game-tying single. When right fielder Mike Stanton misplayed the hit for an error, runners advanced to second and third.

McKeon then ordered Berkman intentionally walked, and Jay followed with a single.

The Cardinals also came from behind early. Pujols' opposite-field homer made the score 1-all in the fourth. He went 8 for 18 in the series.

NOTES: Florida SS Hanley Ramirez (left shoulder) remains sidelined indefinitely. ... Marlins 2B Omar Infante (broken finger) is expected to be healthy to play when he's eligible to come off the disabled list Aug. 20, McKeon said. ... Cardinals RHP Edwin Jackson will make his second start against the Brewers in seven days Tuesday. He gave up eight earned runs in seven innings in a 10-5 loss to them last Wednesday. ... Rookie LHP Brad Hand starts Monday against Atlanta for the Marlins, who have won his past four starts. He's 1-2 with an ERA of 2.00 in three starts at home.