"Just a little bit up and sometimes he was trying to pitch up that was part of the game plan on his part, but just didn't get it up enough and left it more over the plate than he wanted," D-backs manager Chip Hale said.
Greinke (2-2) allowed a pair of runs in the first and then settled in to keep St. Louis off the board for the next three innings.
In the fifth, he allowed three more runs as the Cardinals grabbed a 5-2 lead.
Hale wasn't about to give Greinke a quick hook, not with a bullpen that has been depleted recently and needed to call up a couple of Minor League reinforcements before Monday's game.
"It was important," Hale said of Greinke managing to eat some innings. "Even when he fell behind, we felt real comfortable with leaving him out there at least to give us seven or maybe even eight if we were down, as much as his pitch count would allow to let the bullpen rest a little bit. So it was huge."
Greinke almost made it through seven, but after retiring the first two hitters of the inning he allowed a home run, infield single and a triple.
"I thought I did all right," Greinke said. "It's kind of embarrassing that I gave up seven runs thinking you did all right."
There were two pitches that Greinke wanted to have back, but somehow that translated to the Cardinals scoring seven times.
Greinke has not pitched particularly well in his three home starts and on at least two occasions has allowed home runs to right by right-handed hitters on pitches on the outside corner of the plate.
"It's happened more than most places," Greinke said of the opposite-field homers. "That's what the pitching coach has been saying, throw in more, so maybe I'll have to."
Steve Gilbert has covered the D-backs for MLB.com since 2001. Follow him on Twitter @SteveGilbertMLB. This story was not subject to the approval of Major League Baseball or its clubs.