Just Use Postgres for Durable Workflows
by KraftyOne on 5/28/2026, 6:41:46 PM
https://www.dbos.dev/blog/postgres-is-all-you-need-for-durable-execution
Comments
by: buremba
All you need is Postgres until you scale into TBs of data. We use Postgresql as a durable workflow engine, vector search, time-series data, BM25 search, OLTP/OLAP engine, and a queue. It's basically the only dependency we have for <a href="https://lobu.ai" rel="nofollow">https://lobu.ai</a><p>The main benefit is centralizing all the data in one place so we don't need to worry about copying data in between multiple systems. Once something becomes the bottleneck, you can eventually migrate to a purpose specific tool to scale out.To be honest, LISTEN/NOTIFY in my opinion is the most fragile part of PG but it's fine as start until you scale out.
5/28/2026, 7:39:49 PM
by: llimllib
Armin Ronacher's `absurd` is an implementation of durable workflows for postgres:<p><a href="https://lucumr.pocoo.org/2025/11/3/absurd-workflows/" rel="nofollow">https://lucumr.pocoo.org/2025/11/3/absurd-workflows/</a><p><a href="https://github.com/earendil-works/absurd" rel="nofollow">https://github.com/earendil-works/absurd</a><p><a href="https://earendil-works.github.io/absurd/" rel="nofollow">https://earendil-works.github.io/absurd/</a><p>I've not used it, but it's worth comparing to other options
5/28/2026, 7:36:32 PM
by: stuartaxelowen
My dream is, instead of separating data storage, state machines, valid state constraints, and the logic that transitions between valid states, we can actually unify these into some kernel of app state. Honestly, Postgres already has a lot of these capabilities, but I don’t see an obvious story on the app or product level, providing provably correct sets of states that apps can transition between, and which they can automatically expose to clients in informative ways (this user can like this post, but not edit). It looks colored Petri net shaped to me, but I don’t yet see a simple app state paradigm in the same way that the database has obvious successful boundaries.
5/28/2026, 8:01:02 PM
by: opiniateddev
Conductor OSS does this quite well <a href="https://docs.conductor-oss.org/devguide/ai/index.html" rel="nofollow">https://docs.conductor-oss.org/devguide/ai/index.html</a><p><a href="https://github.com/agentspan-ai/agentspan" rel="nofollow">https://github.com/agentspan-ai/agentspan</a> which is essentially an agentic SDK layer for Conductor can convert any of your langgraph, openAI, vercel, or ADK agent and makes it durable and adds orchestration with no code changes.
5/28/2026, 7:22:09 PM
by: throwaw12
Curious to know experience of people using DBOS and Temporal.<p>I have used Temporal in the past, works really good, my only problem with it was some limits on request payload or event sizes, created some inconveniences to us when building solutions. It also enforces good engineering practices, but sometimes you don't want to write special logic if your CSV file is larger than 2Mb, upload it to S3, pass link, then download it in the workflow.<p>What is your experience with DBOS? How does it compare to Temporal in terms of operational complexity, feature parity and anything else
5/28/2026, 6:57:34 PM
by: vrm
Since DBOS doesn't support Rust, we implemented a very minimal Rust version of this at <a href="https://github.com/tensorzero/durable" rel="nofollow">https://github.com/tensorzero/durable</a>. It has been quite stable and extensible but of course you need to be very careful with the SQL implementations. Hope this is interesting to readers here.
5/28/2026, 6:59:40 PM
by: sgt
Continuously amazed by what you can do with few tools, as long as Postgres is a part of your toolkit.<p>I recently developed a distributed queue and it works really great - benchmarks great too, with no race conditions or conflicts. I used SKIP LOCKED so that workers can compete safely.<p>You can also have multiple workers across nodes avoid conflict by using session wide mutexes i.e. pg advisory lock.
5/28/2026, 6:51:23 PM
by: munk-a
We have a durable queue built into postgres to handle some complex notification-ish logic. It's worked excellently and while there are services various cloud providers would love to sell us to do that it's extremely cheap to run.<p>For that particular usage, the volume we process and business criticality make it a good choice for inventing here - but for other durable processes we just use off the shelf tools since the cost of maintenance would quickly outstrip the value.<p>Postgres is a great tool to use and far more powerful than most people give it credit for - but there's always the balance of in-house maintenance vs. paying rent for someone else's solution.
5/28/2026, 7:29:43 PM
by: pirsquare
I feel it's way too hand wavy on consistency and correctness. My opinion as someone who've implemented marketing workflows that breaks all the time (and tons of painful lessons).<p>Strong correctness guarantee is something that should not be undermine. Even more important than availability.<p>The examples on the website is simple but heavily undermines the importance of correctness. Anyone who implement similar pseudo-code directly will eventually suffer from data correctness issue in crashes.<p><pre><code> @DBOS.workflow() def checkout_workflow(items: Items): order = create_order() reserve_inventory(order, items) payment_status = process_payment(order, items) if payment_status == 'paid': fulfill_order(order) else: undo_reserve_inventory(order, items) cancel_order(order)</code></pre>
5/28/2026, 7:09:49 PM
by: switchbak
Having inherited a few of these - you tend to home-grow an ad-hoc version of many of the existing OSS tools, but with less of the patterns baked in.<p>Not sure where the NIH ends and where you're actually better off with a supported orchestration approach. I suppose if you expect your program to be around a while (or need advanced features), maybe think about using something a bit more battle tested?
5/28/2026, 6:58:08 PM
by: magicseth
Convex has a workpool component that gives the ability to compose big complicated flows in an understandable way, and give you realtime updates on status of various pieces: <a href="https://www.convex.dev/components/workflow" rel="nofollow">https://www.convex.dev/components/workflow</a>
5/28/2026, 7:25:53 PM
by: grahac
Isn't this Just Oban from elixir? :)
5/28/2026, 7:54:16 PM
by: senderista
Citing CockroachDB as an example of scaling Postgres made me spit out coffee. Was this LLM-written?
5/28/2026, 6:51:40 PM
by: hbarka
How do you incorporate secrets in this kind of implementation? Stored in db?
5/28/2026, 7:09:51 PM
by: elliot07
how is this compared to hatchet?
5/28/2026, 7:35:03 PM
by: OutOfHere
I am not convinced that using a special software for "durable workflows" is necessary. If one has a stateful message queue or job task queue, e.g. RabbitMQ or Celery, one can use it. Irrespective, many jobs can be made idempotent. The most that you ought to residually need is a column in an existing table of your own database which keeps track of what remains to be done.<p>Given the above, it would seem that durable workflow software is pushed forward by those who have a surplus of VC money to spend. As for the vendors, there is no shortage of people trying to sell you things that you don't need.
5/28/2026, 7:44:25 PM
by: cpursley
PgFlow is pretty awesome for DAG workflows - it's built on pgmq (which does the heavy lifting, making it backend agnostic).<p>Typescript: <a href="https://www.pgflow.dev" rel="nofollow">https://www.pgflow.dev</a><p>Elixir: <a href="https://github.com/agoodway/pgflow/blob/main/docs/COMPARISON.md#other-workflow-engines" rel="nofollow">https://github.com/agoodway/pgflow/blob/main/docs/COMPARISON...</a>
5/28/2026, 7:03:40 PM
by: llmslave
Temporal is an insane piece of software, always surprised people dont know about it. You could replace almost youre whole AWS stack with temporal
5/28/2026, 7:15:04 PM
by: joshka
[flagged]
5/28/2026, 7:08:58 PM