Spokes.wiki Search About
Created
Updated
Sources
awesome-postgres · pgmq

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.

pgmq · pgbouncer · multiversion-concurrency-control · event-sourcing · postgresql-extensions · awesome-postgres · operational-databases