Postgres work queues
The Work Queues section of awesome-postgres, all seven entries, as catalogued on 2026-08-20. pgmq is written up from its README and SQL source; the rest are at the catalog's word (T3).
A seven-entry section is small, and it is the most thesis-relevant one in the catalog: every entry is somebody deciding not to run a message broker.
| Entry | Catalogued as | Runtime |
|---|---|---|
| pgmq | Lightweight message queue like AWS SQS. Paged from primary sources | SQL / extension |
| river | High-performance job processing for Go and Postgres | Go |
| pgBoss | Queueing jobs from Node.js | Node |
| Graphile Worker | High-performance job queue for Node.js | Node |
| BeanQueue | Python work queue based on SKIP LOCKED / LISTEN/NOTIFY |
Python |
| @andyrmitchell/pg-queue | "No maintenance" queue for Node.js | Node |
| dbos | Durable workflows in TypeScript and Python | TS / Python |
The two mechanisms, and the pooler problem
BeanQueue's catalog line is the most useful in the section because it names both primitives:
SKIP LOCKED and LISTEN/NOTIFY. Those are the two halves — one claims work without
serialising (pgmq explains the mechanism), the other wakes a worker without polling.
And the second half has a hazard this spoke has already paged. pgbouncer's transaction pooling
breaks LISTEN. So a queue built on notifications can stop receiving wakeups when an operator
puts a pooler in front of the database for unrelated reasons, degrading to whatever polling fallback
it has — or to nothing. A queue that only polls, like pgmq, is immune. That interaction is
invisible in the catalog and is the kind of thing this wiki exists to record.
The advantage none of the catalog lines state
Transactional enqueue: the job row and the business row commit together, so the failure mode where one exists without the other cannot occur. Against SQS or RabbitMQ that is not convenience, it is the removal of a consistency boundary. Written up on pgmq.
dbos is a different animal
"Durable workflows in TypeScript and Python" is not a queue — it is workflow orchestration with
state checkpointed to Postgres so an interrupted run resumes rather than restarts. That is the same
problem ../agentic-tooling-wiki pages as durable execution for long-running agents, arriving here
from the database side. Worth a primary read as a cross-spoke subject, and the placement question
would need deciding: the durable-execution pattern is that spoke's, the use of Postgres as the
state store is this one's.
What the section does not have
Any measurement. Not one entry is catalogued with a throughput figure, and pgmq's own README has none either — recorded as growth edge 10.
Related
pgmq · pgbouncer · multiversion-concurrency-control · event-sourcing · postgresql-extensions · awesome-postgres · operational-databases