Prisma Postgres
A weekend of work, and real gaps remain.
Managed Postgres aimed at serverless applications: connection pooling and a query layer in front, so a runtime that opens a connection per request does not exhaust the database.
Build the Postgres setup I actually need instead of a managed serverless one — and start with the problem it solves, because you may not have it. **The problem is connections.** A serverless runtime opens one per request, and Postgres allocates a process per connection, so a few hundred concurrent requests exhaust a database that would otherwise be idle. If your application is a long-running process on one machine, you do not have this problem and none of the machinery below is needed. STACK - Postgres on a machine you rent, or SQLite on the application's own machine if the shape allows - PgBouncer in transaction mode for pooling. Do not write a pooler - Node 20+ for the application - Caddy in front IF YOU ARE SERVERLESS - PgBouncer in transaction pooling mode, which multiplexes many client connections onto a few real ones. That is the whole fix and it is a configuration file - **Transaction mode breaks anything that spans statements**: prepared statements, session variables, advisory locks, LISTEN and NOTIFY. Know which your driver uses and disable prepared statements if it does, or you will get intermittent errors nobody can reproduce - Set the pool size from the database's actual capacity rather than optimistically, and monitor waiting clients - An HTTP query endpoint only if a runtime genuinely cannot open a socket. Then it is a thin authenticated proxy that parameterises everything and never takes SQL from a client IF YOU ARE NOT SERVERLESS - One connection pool in the application process, sized to the database. That is a library call and there is nothing else to do - Consider whether you need Postgres at all. SQLite on the application's own machine turns every read into a local file read — microseconds, no network, no pool — and handles more than people expect THE PART THAT MATTERS MORE THAN POOLING - **Continuous archiving** of the write-ahead log to object storage, giving a recovery point measured in seconds rather than a night - Nightly snapshots with a stated retention - **A restore rehearsed onto a clean machine, with the time written down.** That number is your recovery time and almost nobody knows theirs - A verification job, because a backup failing quietly for three weeks looks exactly like one that works - An alert on the age of the last successful backup MIGRATION DISCIPLINE - Backwards-compatible in both directions across a deploy: add a column, deploy, write to it, backfill in batches, read from it, and remove the old one in a later release. Never two steps together - Test every migration against a restored copy of production first WATCHING IT - Connection count against the limit, waiting clients in the pooler, slow queries with their plans, replication lag, and free disk with an alert well before it matters WHAT MATTERS MOST Work out whether you have the connection problem before solving it. If you do, PgBouncer in transaction mode is a configuration file; if you do not, the whole category is answering a question you did not ask.
What you lose
- A pooler in front of the database, which is what makes serverless and Postgres work together at all
- Backups, point-in-time restore and upgrades run by somebody else
- A query layer reachable over HTTP, so an edge runtime that cannot open a socket can still read
- Capacity that scales without you sizing anything
If you would rather not build
- A connection pool in the application process, which is what a long-running server needs
The escape hatch
open source · no votes, no paid placement
Litestream
$0Continuous replication of SQLite to object storage.
benbjohnson/litestreamfree · open source
Why this verdict
our own opinion · changed only by a person
46/100
Verdict kinda at 46: pooling is a configuration file and backups are a script, but the managed instance is somebody else recovering the database, and that is worth real money. The entry starts by asking whether the connection problem exists at all.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
Questions about Prisma Postgres
answered from the record above
Is Prisma Postgres free?
No — the plan we track is $8 a month. Starter from around $8/month billed monthly, priced on storage and operations, with a free tier for small projects.
Can you replace Prisma Postgres by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 46 out of 100, build time a weekend. Read what you lose before you decide.
How much does Prisma Postgres cost?
$8 a month on Starter — $96 a year. Recorded 14 Aug 2026.
What do you lose by replacing Prisma Postgres?
A pooler in front of the database, which is what makes serverless and Postgres work together at all; Backups, point-in-time restore and upgrades run by somebody else; A query layer reachable over HTTP, so an edge runtime that cannot open a socket can still read; Capacity that scales without you sizing anything. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Prisma Postgres?
Yes: PgBouncer, Litestream. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

