PSG were overwhelmingly dominant but needed a 94th-minute strike from Kylian Mbappe to seal a 1-0 victory over Real Madrid in the first leg of their Champions League last 16 tie.
The first chance fell to Angel Di Maria, who was picked out well by a low cross from Mbappe but was unable to keep his shot under the bar when he really should have done better.
Mbappe then had his own effort well saved by Thibaut Courtois, with the French side enjoying the lion's share of the possession and preventing Real from getting anything going in the opening stages.
The visitors didn't have a single shot up until the final kick of the first half, when Casemiro's header trickled harmlessly wide. It was all PSG, but to Real's credit, they defended well and limited them to just one shot on target in the first 45.
Mbappe had the second half's first chance too. Some nice work in the box gave the PSG man the angle to get a shot off, but his powerful effort was well repelled by the excellent Courtois.
Unsurprisingly, Mbappe's constant pressure eventually took its toll as the PSG man was awarded a penalty on the hour mark following a clumsy challenge from Dani Carvajal. Lionel Messi stepped up but saw his effort well saved by Courtois.
The dynamic of the match remained the same after that and Neymar's introduction only helped PSG remain on top. They had a number of good efforts, but simply could not find a way past the impenetrable Courtois.
Real threatened to do something exciting late on, pushing forward more than they had done in the entire game, but that left them exposed at the back and Mbappe finally made the breakthrough with effectively the final kick of the game, slotting past Courtois to give PSG the win they deserved.
PSG player ratings
1. Goalkeeper & defenders
Gianluigi Donnarumma (GK) - 6/10 - Hope he kept warm.
Achraf Hakimi (RB) - 7/10 - A real threat down the right. Got forwards as often as possible but also kept Vinicius quiet at the back.
Marquinhos (CB) - 7/10 - Keeping Benzema quiet isn't easy, but Marquinhos made it look like a walk in the park.
Presnel Kimpembe (CB) - 7/10 - A straightforward evening.
Nuno Mendes (LB) - 7/10 - Combined perfectly with Mbappe down the left. Caused problems for Carvajal time and time again.
Leandro Paredes (DM) - 7/10 - Did a subtly excellent job of shielding PSG's backline. Was the only player really looking to get Messi involved.
Marco Verratti (CM) - 8/10 - Absorbed Real's press with ease and took control of the midfield battle almost immediately. Ran the show.
Danilo Pereira (CM) - 6/10 - Dropped into a back three when PSG attacked to allow his full-backs to get forward. Didn't do much but that tactical job was crucial.
Angel Di Maria (RW) - 5/10 - Skied a great early chance and found it hard to get involved in the game after that. Subbed for Neymar with 20 minutes to go.
Lionel Messi (ST) - 3/10 - Fluffed his lines from the penalty spot which summed up his evening.
Kylian Mbappe (LW) - 9/10 - Ran the show from start to finish. A massive threat all night. Might make a good signing this summer.
Neymar (RW) - 7/10
Idrissa Gueye (CM) - N/A
Real Madrid player ratings
5. Goalkeeper & defenders
Thibaut Courtois (GK) - 8/10 - Another monstrous performance from Courtois. A great penalty save to go along with a handful of other stops.
Dani Carvajal (RB) - 4/10 - Really struggled to deal with Mbappe (understandably), but a poor decision to give away the penalty.
Eder Militao (CB) - 7/10 - Came across to help Carvajal regularly and did a great job of that.
David Alaba (CB) - 8/10 - Got into some excellent positions and cut out pass after pass after pass. A classy performance.
Ferland Mendy (LB) - 5/10 - Not particularly busy as PSG focused their efforts on the other wing, but still struggled to cover himself in glory. Booked and therefore suspended for the next leg.
Casemiro (DM) - 7/10 - Did so much dirty work to help out in the battle against Mbappe. Picked up a yellow card which means he will be suspended for the return leg.
Toni Kroos (CM) - 5/10 - Not involved nearly enough. Real's low possession numbers tell you the story.
Luka Modric (CM) - 6/10 - Disappointing in possession but did a nice job of helping out against Mbappe as well.
Marco Asensio (RW) - 2/10 - Just did nothing before being replaced by Rodrygo.
Karim Benzema (ST) - 4/10 - Had a few nice flashes but just couldn't get on the ball enough. Passes up to him were nowhere near good enough.
Vinicius Junior (LW) - 3/10 - Kept painfully quiet.
Lucas Vazquez (RB) - 5/10
Rodrygo (RW) - 5/10
Fede Valverde (CM) - N/A
Eden Hazard (LW) - N/A
Gareth Bale (ST) - N/A