A managed database, end to end
A managed database for anything that needs to remember something: nightly backups, point-in-time recovery, patching, and monitoring, at one fixed monthly rate. This page also covers how your app actually reaches it, how a schema change ships, and what happens when one fails halfway.
Three tiers, one rate each
From a side project to a production workload — sized for memory and storage, with retention that grows alongside the tier.
DB Starter
Shared-tier Postgres · 1 GB RAM · 10 GB storage
Side projects, small apps
Daily backups · 7-day retention
$12/mo
- Recommended
DB Standard
Postgres · 2 GB RAM · 40 GB storage
Production apps
7-day PITR
$25/mo
DB Plus
Postgres · 4 GB RAM · 100 GB storage
Heavier production workloads
30-day PITR
$49/mo
Full rate detail, add-ons and fair-use limits live on the rate card →Pricing
What a database actually holds
A database holds anything an app needs to remember. Here is what that actually means.
Records with a fixed shape
Users, orders, subscriptions, comments.
Rows an app reads and writes constantly. They must stay consistent with each other. This is most of what a database is for.
Anything that must survive a restart
A shopping cart, a login session, a saved draft.
If losing it on a redeploy would be a real problem, it belongs here, not held only in a running process.
What it is not for
An uploaded photo, a generated report file.
Those are files, not rows, and they live on a different kind of storage. See Files.
How your app reaches it, hop by hop
What a connection string actually is, why the network stays private, and what a pool limit means in practice.
- 1
Your app holds one secret
A single connection string, kept the way any other secret is — never written into the code itself. See Access.
You
- 2
The path between app and database is private
Not reachable from the open internet at all — only from the app it is attached to.
CustomHosted
- 3
A connection comes from a shared pool, not one at a time
A pool is a small set of open connections an app reuses, instead of opening and closing one for every query. It is faster. It is also what has a limit.
CustomHosted
- 4
The tier sets that limit
Every tier caps how many connections it will hold open at once. Staying near that cap for more than a spike is the outgrown signal on the ladder below. See Scaling.
CustomHosted
A schema change, step by step
The migration is yours to write, or a CodeHerder brief's to open. Everything after that is ours — including what happens if it fails halfway.
- 1
The migration is written
A new column, a new index, a changed constraint — the migration is application code. Write it yourself, or let a CodeHerder brief open it as a pull request.
You
- 2
Tried against a copy first
Pulled in on request from a recent backup, or seeded with placeholder data if a real copy isn't needed for the check being done. See Environments.
CustomHosted
- 3
A snapshot is taken before it runs
Nightly dump, plus point-in-time recovery on the tiers that carry it. See Recovery.
CustomHosted
- 4
It runs inside the same deploy
No separate migration step to remember. The pipeline that ships the code runs the migration too.
CustomHosted
- 5
If it fails halfway
The pipeline halts and the last known-good version keeps serving; a human is notified. See Monitoring.
CustomHosted
You do not have to write the migration yourself. Describe the change in plain language instead. From the brief onward it takes the same path as every other reviewed change on this platform, which Patching describes in full. That is the Agentic iteration — CodeHerder add-on ($25/mo):
- 1
Briefed as a change
Written up the same way any other change request is — this is what the Agentic iteration — CodeHerder add-on covers.
CustomLabs
- 2
An agent opens the pull request
The upgrade lands as a real pull request against the repository, with the test suite run against it.
CodeHerder
- 3
A human reviews and merges
Someone reads the diff before it goes anywhere near production — nothing here is auto-applied blind.
CustomLabs
- 4
It ships through the same pipeline
The same pipeline that deploys everything else on your stack ships this too — no separate process to babysit.
CustomHosted
- 5
You're told it's done
A note confirming what changed and that it merged, in the same shape as every other note on this site.
CustomHosted
Managed end to end
The database is yours, but running it isn't your job — we keep it backed up, patched, watched, and encrypted.
- Automated daily backups
- Point-in-time recovery
- Managed patching & minor-version upgrades
- Monitoring & alerts
- Encrypted at rest and in transit
- A human who answers
The tick list above promises minor-version upgrades. Version upgrades run on two tracks. What changes between them is who asks for the move, and when it runs:
Minor version
Standing window, monthly
A brief connection blip, noted after the fact. See Patching.
CustomHosted
Major version
Only when you ask, in a window you pick
A major release can change how the engine behaves, so it never applies itself. You ask for the move. It runs the same way as a tier change: scheduled, snapshotted first, rollback ready. See Scaling.
CustomHosted
The honest retention story
Backups run nightly on every tier. Point-in-time recovery (PITR) lets you roll the database back to a specific moment, not just the last snapshot — and how far back you can go grows with the tier.
| Tier | Retention |
|---|---|
| DB Starter | Daily backups · 7-day retention |
| DB Standard Popular | 7-day PITR |
| DB Plus | 30-day PITR |
A retention window is only useful if a restore from it actually works — see what a restore actually involves.
What we watch, and who hears about it
Connections, replication, and backup completion — logged continuously, escalated to a human once anything crosses a safe margin.
| Signal | What fires it | First response | Auto or human |
|---|---|---|---|
| Connections, replication, and backup completion | A connection pool running out, replication falling behind, or a nightly backup that never reported success | Logged and, for anything past a safe margin, handed to a human the same day | Auto, then human |
- 1
Auto-handled
Restart, retry, or redeploy the last known-good version, done automatically
No one, unless it recurs — it goes in the log, not a message to you
- 2
You hear from us
A human looks at it and decides what to do — revert, restore, or a fix in code
You, in writing, on the same quote channel as everything else — business hours for anything that isn’t urgent
- 3
Outage handling
Worked ahead of the routine queue
You, as soon as there is something to say, with priority handling; out-of-hours response is best effort, not a staffed round-the-clock desk
The signal, and the next rung
Every rung names the signal that means you've outgrown it, and exactly where it points next.
| Tier | Outgrown when | Next step |
|---|---|---|
| DB Starter | Storage fills past headroom, or a second app wants to share the same database. | Move to DB Standard — more memory, more storage, and point-in-time recovery. |
| DB Standard | Connections sit near the pool limit, or query volume needs more memory to stay fast. | Move to DB Plus — production sizing with extended retention. |
| DB Plus | One database can no longer hold the whole workload on its own. | A Custom quote for a database shaped around the workload — see "When a bigger box is the wrong answer" below. |
"When a bigger box is the wrong answer" is on Scaling.
Getting the data in, and out
Moving in from wherever it runs today, and taking a copy with you whenever you leave.
A one-time import, on the way in
A dump from wherever the database runs today, restored into the new tier ahead of the cutover. Checked before anything points at it for real. See Migrations.
A standard dump, on the way out
Standard dump format. Restore into any compatible database. See Portability.
Storage is billed inside the tier, not on the instance disk
Sized and billed as part of the tier itself: 10 to 100 GB, depending which one. That is a different disk from the one an app writes to. See Files.
A longer backup window is the one add-on
Extended backup retention (30-day), +$8/mo — daily backups kept for 30 days instead of 7.
The database this site does not have
We sell a managed database and run none ourselves. Here is why that is the right call for this site.
This site keeps no database at all
The one form on customhosted.com posts to a relay and keeps nothing — no row is ever written or read back.
That is the right call for a marketing site
A quote form does not need to survive a restart. It does not need a later query either. Adding a database here would add risk, not value.
The moment that stops being true
The day this site needs to show a customer their own account or history, it needs a real database. One of the tiers on this page would do — sized the same way as any other app.
The honest limits
Not buried in a footnote — the same discipline as every other honesty band on this site.
No read replicas today
When read traffic alone is the bottleneck, a second database built for reads is a rebuild, not a resize. See Scaling for the rest of it.
No automatic failover to a second machine
One instance is one instance. Losing it triggers a restore, the same procedure as any other data-loss event. There is no silent switch to a standby. See Recovery for the rest of it.
Query tuning is consulting work, not a managed feature
A slow query needs a person to read it and rewrite it. That is real engineering, not a setting anyone flips. It is CustomLabs work, quoted like any other change.
Postgres today, another engine on request
This page prices Postgres. A different engine is a custom quote, sized and reviewed the same way as any other bespoke shape. See Custom for the rest of it.
Stands alone, or attaches to any plan
A managed database doesn't need a reason to exist on its own — but it's built to pair with the rest of the stack just as easily.
Database questions
The questions that come up once "just add a database" stops being a one-line decision.
01What actually happens if too many connections open at once?
Each tier caps how many it will hold open. Running near that cap for more than a brief spike is exactly the "outgrown" signal on the ladder above — it gets flagged, and the fix is either a bigger tier or fixing a connection leak in the app.
02Who writes the schema migration?
You do, or a CodeHerder brief does on your behalf as a pull request. Everything after that — the snapshot, running it inside the deploy, what happens if it fails halfway — is ours.
03What happens if a migration fails halfway through?
The same thing that happens to any other deploy that fails partway: the pipeline halts and the last known-good version keeps serving, with a human notified. The pre-migration snapshot is there if anything needs restoring from before it ran.
04Who upgrades the database version?
Minor versions move on the same standing patch window as everything else — a brief connection blip, noted after the fact. A major version never applies itself; you ask for it, and it runs on a window you pick, the same way a tier change does.
05Do you offer read replicas or automatic failover?
Not today. A read replica is a rebuild CustomLabs can design once read traffic alone is the bottleneck, not a setting to switch on. Losing the one instance is a restore, the same procedure as any other data-loss event.
06Can you help with a slow query?
Query tuning is real engineering, not a managed feature we flip on — it's CustomLabs work, designed and quoted like any other change.
07Does this database ever hold my customers' data?
This site's own form doesn't — it posts to a relay and keeps nothing. The tiers on this page exist for your app, sized the same way whether it holds ten rows or ten million.
What databases connect to
- Pricing
The full rate card — flat, predictable, and posted in the open.
- Dedicated compute
A dedicated instance to attach the database to, sized to the workload.
- Static hosting
Static sites and SPAs served from the edge network, deployed on every push.
- Scaling
The database ladder in full, and what "outgrowing a tier" actually means.
- Environments
What a staging copy of the database actually holds before a schema change ships.
- Recovery
What a restore actually involves, and the retention ladder behind it.
- Portability
The full handover pack, including the database dump this page's exit row reuses.
- Access
How a connection string is held as a secret, and who can reach it.
Sizing a database, or planning a schema change?
Brief it through the same quote channel as any other request — an agent opens the pull request, a human merges it, and the same pipeline ships it.