"He had a little bit more giddyup," Washington manager Manny Acta said of Patterson. "His body language was better tonight."
Patterson (1-4) won for the first time since April 15, 2006. He made just eight starts last season due to forearm trouble that landed him on the disabled list twice and required surgery in July.
"You want to get the first one out of the way and get the monkey off my back," Patterson said. "But I still have a long way to go."
Austin Kearns and Kory Casto each drove in runs against Peavy (3-1), who was coming off a 16-strikeout performance in his last outing, a no-decision at Arizona on Wednesday. Peavy went seven innings against the Diamondbacks but Stephen Drew hit a two-out, two-run homer off Trevor Hoffman in the ninth to give Arizona the win.
Peavy followed that effort with 10 strikeouts against Washington. He allowed three runs and six hits.
Peavy committed a mental error in the fourth that proved costly. After hitting Ryan Church in the shin with two outs, Peavy went to a full windup instead of pitching out of the stretch and Church stole second base standing up. Kearns' RBI single gave the Nationals a 2-1 lead.
"I thought he was upset," Peavy said of Church, who flung the bat to the ground when he was hit. "It didn't get me flustered. I just didn't think.
"I had a brain fart. It cost us the game and I take full responsibility."
Church, who scored the Nationals' first run in the second on Dmitri Young's groundout, was surprised when Peavy pitched out of his full windup.
"It was kind of weird," he said. "I kind of wanted to call timeout and tell him, 'Hey, dude, you're pitching out of the windup.' But you just keep your mouth shut and wait until he starts and go."
Casto put Washington ahead 3-1 with an RBI double off Peavy in the seventh.
Patterson (1-4) gave up four hits and got into trouble just once when he pitched out of a bases-loaded, one-out jam in the sixth.
"It was big," Patterson said. "I pitched around a couple of hitters to get to guys I was a little more comfortable facing. I tried to be smart with the situation and tried to be real patient."
After Peavy led off the sixth with a single, Patterson walked Terrmel Sledge. One out later, Adrian Gonzalez drew a walk to load the bases. The right-hander then got Josh Bard on a shallow fly to right and retired Khalil Greene on a hard smash to third baseman Ryan Zimmerman.
Chad Cordero pitched a perfect ninth for his fourth save in seven chances.
After Casto's run-scoring double in the seventh, Peavy worked out of a jam to keep San Diego within two. Washington loaded the bases with no outs but Peavy struck out pinch-hitter Robert Fick and Felipe Lopez, for the fourth time, before retiring Ronnie Belliard on a flyout.
Sledge homered with two outs in the third to give San Diego a 1-0 lead.
Bard made it 3-2 in the eighth with a homer off Ray King.
- Cordero had blown three saves in his five previous chances coming into the game.
- Padres 2B Marcus Giles was held out of the lineup due to a bruised rib he suffered in Sunday's 17-inning loss to the Dodgers. Giles is expected back in a couple of days.
- Casto, recalled earlier in the day from Triple-A Columbus, started in left field and went 1-for-4.