Francisco Liriano held St. Louis (68-51) to one run on four hits in his second complete game of the season. The Cardinals lone run came on Carlos Beltran's ground out scoring Matt Carpenter in the bottom of the ninth.
Pittsburgh (71-48) jumped St. Louis' starter Shelby Miller in the second with a pair of home runs. Pedro Alvarez led off the inning with a solo blast, and two batters later Garrett Jones hit a homer of his own. The Pirates drove in three more in the fourth -- two of them unearned thanks to an error on third baseman David Freese.
Miller was pulled after six innings. He allowed five runs -- three earned -- on eight hits. It was his eighth loss of the season.
The Cardinals and Pirates play the series finale Thursday at 12:45pm.