Why we moved our queue back to Postgres

October 2026

Placeholder article. This body stands in for the real post; replace it and delete the placeholder flag in the frontmatter.

The point this article will make: the dedicated queue was one more system to run, and our jobs were small and numerous, which is exactly what Postgres is good at.

The schema we settled on, for reference:

create table jobs (
  id bigserial primary key,
  kind text not null,
  payload jsonb not null,
  run_after timestamptz not null default now(),
  picked_at timestamptz
);

The worker loop is a single update ... returning statement, and it has not fallen over once since the move.