Wake up autovacuum launcher from postmaster when a worker exits

Heikki Linnakangas <hlinnaka@iki.fi>

From: Heikki Linnakangas <hlinnaka@iki.fi>
To: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2026-01-08T19:57:38Z
Lists: pgsql-hackers

Attachments

When an autovacuum worker exits, ProcKill() sends SIGUSR2 to the 
launcher. I propose moving that responsibility to the postmaster, because:

* It's simpler IMHO

* The postmaster is already responsible for sending the signal if fork() 
fails

* It makes it consistent with background workers. When a background 
worker exits, the postmaster sends the signal to the launching process 
(if requested).

* Postmaster doesn't need to worry about sending the signal to the wrong 
process if the launcher's PID is reused, because it always has 
up-to-date PID information, because the launcher is postmaster's child 
process. That risk was negligible to begin with, but this eliminates 
completely, so we don't need the comment excusing it it anymore.

I'm a little surprised it wasn't done this way to begin with, so I 
wonder if I'm missing something?

- Heikki

Commits

  1. Wake up autovacuum launcher from postmaster when a worker exits

  2. Add a multi-worker capability to autovacuum. This allows multiple worker