The Reds set a modern franchise record by failing to score in the first 17 innings of the season. Their previous worst was 13 scoreless innings in 1909 and 1934.
Ryan Ludwick and Todd Frazier opened the ninth with singles off Carlos Martinez (0-1). After a sacrifice, Brayan Pena was walked to load the bases and the pinch-hitting Heisey singled up the middle.
The Reds were the last team in the majors to score a run this season. Heisey's hit broke an 0 for 11 slump with runners in scoring position.
J.J. Hoover (1-0) pitched out of a threat in the ninth, getting Matt Adams on a called third strike with two runners aboard.
The NL Central rivals waited 2 hours, 40 minutes to get started. They wanted to get the game in because heavy rain was forecast for Thursday afternoon when they conclude their series.
The Reds promoted it as opening night, complete with pregame player introductions and postgame fireworks. The introductions were cancelled because of the long delay, and the fireworks were shot off as the grounds crew removed the tarp and prepared the field for the first pitch.
Neither starter had a problem because of the delay.
Left-hander Tony Cingrani gave up a pair of singles and two walks in seven innings. He spent the offseason working on his secondary pitches. Last year, he threw his fastball 81.7 percent of the time, the second-most by a starter in the majors, according to STATS LLC.
Michael Wacha allowed three hits in 6 2-3 innings. He got shortstop Zack Cozart to ground into a forceout with the bases loaded in the fourth.
Cozart saved a run with a diving catch in center field in the eighth, grabbing Matt Carpenter's sinking liner with a runner in scoring position.
The defending National League champions opened the season with a 1-0 win on Monday, when Yadier Molina's seventh-inning homer made the difference. It was the first time since 1953 that the Reds were shut out on opening day.
St. Louis hasn't started a season with back-to-back shutouts since 1963, when the Cardinals posted three consecutive shutouts.
NOTES: RH Lance Lynn starts for the Cardinals on Thursday. He beat the Reds three times last season. RH Homer Bailey, who missed time during spring training with a strained groin, starts for the Reds. ... Cardinals OF Jon Jay carries a 14-game hitting streak from last season. ... Joey Votto doubled in the first inning for his 1,000th career hit. ... Cingrani picked Adams off first base in the fifth inning. He led the Reds staff by picking off six runners last season. ... Reds manager Bryan Price said RH Jonathan Broxton could come off the DL during the series in St. Louis next week. He's recovering from surgery on his pitching forearm last August. Broxton would become the closer until Chapman returns. ... C Devin Mesoraco also could be activated off the DL in St. Louis. He's sidelined by a strained oblique.
Follow Joe Kay on Twitter: http://twitter.com/apjoekay