Lee Tomlin had an ambitious 30-yard effort inside the first few minutes, but his volley found the roof of the net with Heaton scrambling. Stephen Pearson curled a free-kick over the crossbar on five minutes after a foul by Gabriel Zakuani on the edge of the area.
Pearson slid a shot inches past the post after good work from Baldock, who had earlier been booked for a late foul on Bostock.
Posh had the ball in the back of the net on 35 minutes as Tomlin converted at the second attempt, but the offside flag had long been raised. A mazy run from Mendez-Laing saw him beat three defenders, but his eventual shot was smothered by Heaton.
There was a change of assistant referee for the second half with fourth official S. Ross taking over duties. The visitors got their noses in front on 57 minutes and it was a horrible moment for Mark Little's whose back-pass went straight to BALDOCK, who rounded Olejnik and tapped into empty net.
Little then appeared fortunate to escape with just a caution after a tackle on Fontaine. It was 2-0 to the visitors on 59 minutes as BALDOCK tapped home from close-range after good work from substitute Adomah. Ferguson was rightly expecting a free-kick after a foul on Tomlin in the build-up.
Boyd was replaced by Emile Sinclair on 67 minutes. Moments later, Pearson was inches away from adding a third, but his left-foot shot went wide.
At the other end, Emile Sinclair fired straight at Heaton as Posh came close to pulling one back. Olejnik beat away a fierce drive from Pearson as the fourth official indicated eight minutes of stoppage time.
A minute into that stoppage time, Posh pulled a goal back as TOMLIN was upended in the box and then stepped up to coolly dispatch the penalty kick.
Final Score: Posh 1-2 Bristol City
Posh: Olejnik, Zakuani, Bostwick, Tomlin, Barnett, Boyd (sub Sinclair 67min), McCann (sub Newell 85min), Little, Knight-Percival, Ntlhe, Mendez-Laing. Unused subs: Day, Alcock, Brisley, Sinclair, Ferdinand, Frecklington.
Bristol City: Heaton, Foster, Fontaine, Baldock, Woolford, Wilson, Skuse (sub Adomah 46min), Pearson, Cunningham (sub Bryan 76min), Taylor (sub Davis 87min), Elliott. Unused subs: Gerken, Carey, Kilkenny, Stead.