The long-lived transaction that keeps the deleted jobs from being reclaimed - is that process working with the job queue table, or is it working with other tables in the database?
Even if the long-running transaction hasn't accessed the job queue table yet it might do so before it completes. Postgres needs to keep the "dead" tuples accessible as long as there are active transactions that started before the deletion.
Right, that's what I thought. Is there value in giving the job queue its own database then, or are they taking advantage of the fact that the jobs modifications can be included in transactions that involve other tables?