Logan Forsythe and Alexi Amarista had two RBI apiece in San Diego's sixth win in their last seven starts.
Edinson Volquez (10-10) lasted 5 1/3 innings and walked six batters but still got the win with three runs – two earned – on four hits.
Cameron Maybin and Yonder Alonso also tallied RBI for the Padres.
David Freese had a solo home run for the flagging Cardinals, who have lost five of six and hold a one-game lead over the Dodgers in the race for the final NL wild card berth.
Adam Wainwright (13-13) suffered the loss after allowing five runs -- two earned -- on five hits over six innings.
San Diego committed three errors in the game and St. Louis had one gaffe.
NBC reportedly holds celebs hostage to Jimmy Fallon's show
Aaron Carter is still in love with Hilary Duff