The game looked to be heading for a stalemate until a virtuoso goal from Glen Johnson broke the deadlock, to be added to just four minutes later by a Hermann Hreidarsson header.
Portsmouth always looked like the team that wanted to win the game, with Peter Crouch and David Nugent sharing several chances in the first half without finding the breakthrough.
The game appeared to be drifting toward another missed opportunity for Pompey following last week's loss to Liverpool, but Johnson provided the spark with a wonderful run and Hreidarsson sealed a well-deserved victory.
The clean sheet also pays a fitting tribute to David James' 536th top flight game which sees a new Premier League appearance record set by the 38-year-old stopper.
There was very little to celebrate for City though, with Mark Hughes' men seemingly unwilling spectators to the contest at times - a fact underlined when the under-pressure boss withdrew Robinho with the game still poised at 0-0.
Opening exchangesIt was Portsmouth who started as they meant to continue, nearly drawing first blood after just eight minutes when Peter Crouch snatched at a fine chance.
Pennant cut in at pace from the right, leaving Wayne Bridge in his wake, before a ricochet found its way to Crouch eight yards out. The striker made firm contact but Shay Given did not have to move to collect the shot.
Two minutes later there was another scare for a City side clearly missing Richard Dunne's leadership at the back, with Nugent breaching the defensive line before running the ball too far.
Given left his line to collect and although he did not succeed in smothering the shot, the angle was too tight and the danger passed.
The visitors were struggling for a foothold in the game but survived again when Niko Kranjcar waited a fraction too long for the ball to drop and blazed over on the turn after 16 minutes.
City's first chance of note came 22 minutes in, Craig Bellamy combining with Bridge to tee up Robinho, whose shot curled over the crossbar.
Given was in action just a minute later, again leaving his line to claw the ball away from the on-rushing Nugent's boot.
Pompey pressurePortsmouth continued to press and Crouch was again close to opening the scoring, this time just losing out to Vincent Kompany when one touch would have deflected Kranjcar's whipped cross goalwards.
The chances kept piling up for the hosts, with Nugent heading wide at the far post from Johnson's hanging cross.
City's enviable talent finally started to show signs of life, Bellamy and Stephen Ireland moving the ball quickly, but there were too many long balls to make the best of the Brazilian duo of Elano and Robinho.
Seven minutes into the second period Johnson almost showed his side's attackers how it was done, neatly turning Nigel De Jong inside the City area before sending a low shot towards the near post. But Given saved comfortably.
The Irishman was not needed after 54 minutes when Nugent, set loose by Kranjcar's exquisite pass, fluffed his shot when one-on-one with the goalkeeper.
As bright as he was in the build-up, Nugent's lack of composure in front of goal was becoming a worry.
Ireland, although not at his best, appeared to be City's best hope of creating something - a deft back-heel to Robinho particularly catching the eye.
The Irishman played in Bellamy in on the hour and though the Wales captain did well to break free from Sylvain Distin, his shot was wild.
Meanwhile, Crouch and Johnson were peppering the City goal with hopeful efforts in reply.
Unfortunately, the better chances continue to fall Nugent's way, with the former Preston man sending Pennant's corner wide of the post after winning his header eight yards out.
BreakthroughThen, with 20 minutes to play, Johnson finally broke the deadlock with a goal that was in equal parts panache and perseverance.
First the England full-back scrapped his way down the right wing before cutting inside and drilling the ball towards Given's near post.
The former Newcastle man got down well to beat the shot away but it was Johnson, following up his initial effort, who collected the rebound and dispatched it coolly into the top corner.
Just over four minutes later, Pompey were two up.
Pennant won and took a corner on the right, with Logan failing to challenge the leaping Hermann Hreidarsson, who powered his header home.
Goalkeeper David James then ensured he would mark his day with a clean sheet, saving at full stretch from Ched Evans' late header.
Johnson almost capped a remarkable display with a second goal almost identical to his first, only to see his effort cleared off the line with two minutes to play.
1st Half Goals
Shots on Target
Shots off Target