A brace from Erik Huseklepp and a Jason Pearce header was enough to give Michael Appleton's side their first win in four matches.
Peterborough are now winless in five league games and are in danger of being sucked into a relegation battle.
Posh boss Darren Ferguson made three changes from their 2-1 loss to Brighton, with Lee Frecklington, George Boyd and Grant McCann all making their first starts after injury.
Appleton only made one change his side's narrow 3-2 defeat at Cardiff, Ricardo Rocha replacing struggling striker Dave Kitson.
Portsmouth started the match with real purpose and after six minutes as Joel Ward found himself in space on the right wing.
His cross was met by Marko Futacs, whose header was palmed away by Joe Lewis before Huseklepp eventually fired home the rebound for his fourth goal of the season.
Peterborough fought back into the game and Stephen Henderson was relieved to see Paul Taylor's right-footed drive from just outside the box fly inches wide of his far post.
Kelvin Etuhu, playing his second match in Portsmouth colours, was causing the home defence problems and almost created his side's second goal.
The striker played in his captain Liam Lawrence on the right-hand side whose shot was smartly tipped around the near post by Lewis.
Etuhu then drove in from the right again and rifled a shot just over Lewis' crossbar, as Peterborough struggled to deal with the imposing Nigerian.
The deserved second goal came Portsmouth's way five minutes before the break, when defender Pearce's run went untracked by the Peterborough defence and he glanced home a Liam Lawrence to double his tally for the season.
The hosts rarely looked like scoring after the break, belying their record as the second most prolific strikeforce in the Championship.
If anyone looked like pulling Posh back into the game it was Taylor, as the midfielder went on a mazy run but his shot from the edge of the box drifted wide.
McCann then had a free kick that Henderson tipped around the post as Peterborough finally looked to apply some pressure on the Portsmouth goal.
Henderson had to be alert again when Tommy Rowe was put through but the winger's shot was too close to the Pompey keeper.
Portsmouth then sealed victory with a clinical finish from Huseklepp, who easily turned Ryan Bennett and bent the ball around Lewis and into the far corner.
The third goal put a deserved gloss on the scoreline and wrapped up Portsmouth's first victory at London Road since December 1961.