Pompey saw their lead at the top of League One cut down to four points as their rivals enjoyed success.
Luton remain in second place as they picked up their first win at Coventry since 1987, with a 2-1 victory.
Matt Pearson and James Collins got the goals for the Hatters as they made it five League One wins on the bounce and just one loss in their past 15 league outings.
Sunderland moved to within five points of Kenny Jackett’s men as they picked up a 2-1 victory over Bristol Rovers.
Adam Matthews and Josh Maja sealed a come-from-behind victory for the Black Cats after Alex Rodman had put the visitors in front in the 11th minute.
That means Jack Ross’ men can now knock Pompey off top spot if they win their two games in hand.
Peterborough needed a stoppage-time goal from Rhys Bennett to keep fourth place and deny new Shrewsbury boss Sam Ricketts the perfect start, as they picked up a 2-2 draw.
Matt Godden cancelled out Greg Docherty’s opener before Fejiri Okenabirhie put the home side back in front, but then came Bennett’s late intervention.
Goal difference separates Peterborough and Charlton, as Lee Bowyer’s men followed up their three points at Pompey with a 2-0 win over AFC Wimbledon.
The Addicks overcame Naby Sarr being sent off in the first minute for a lunge on Tennai Watson, but Mitch Pinnock was also dismissed for the visitors in the 33rd minute.
Lyle Taylor and Mark Marshall’s 86th-minute effort did the damage for the home side.
Doncaster occupy the final play-off spot as they cruised to a 3-0 victory over Scunthorpe.
Two goals in 10 minutes from Ben Whiteman and Herbie Kane put Donny in control before former Pompey loanee John Marquis rounded off the win five minutes from time.
Elsewhere in League One, Bradford move off the bottom of the table as they thrashed Walsall 4-0 at Valley Parade.
Plymouth’s 2-1 win over Rochdale sees them occupy the final relegation berth.
Southend’s 3-0 romp over Accrington continues Stanley’s poor form with Oxford beating Blackpool 2-0, Fleetwood 1-0 winners over Burton and Gillingham drawing 2-2 with Wycombe.