№ 01 Databases

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.

№ 02 Sizing

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

  • 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

№ 03 What goes in one

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.

№ 04 How it connects

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. 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. 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. 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. 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

№ 05 Changing the schema

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. 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. 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. 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. 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. 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. 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. 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. 3

    A human reviews and merges

    Someone reads the diff before it goes anywhere near production — nothing here is auto-applied blind.

    CustomLabs

  4. 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. 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

№ 06 Operations

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

№ 07 Backups & retention

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.

TierRetention
DB StarterDaily backups · 7-day retention
DB Standard Popular7-day PITR
DB Plus30-day PITR

A retention window is only useful if a restore from it actually works — see what a restore actually involves.

№ 08 What we watch

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.

SignalWhat fires itFirst responseAuto or human
Connections, replication, and backup completionA connection pool running out, replication falling behind, or a nightly backup that never reported successLogged and, for anything past a safe margin, handed to a human the same dayAuto, then human
  1. 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. 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. 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

№ 09 Outgrowing a tier

The signal, and the next rung

Every rung names the signal that means you've outgrown it, and exactly where it points next.

TierOutgrown whenNext step
DB StarterStorage 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 StandardConnections sit near the pool limit, or query volume needs more memory to stay fast.Move to DB Plus — production sizing with extended retention.
DB PlusOne 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.

№ 10 Data in, and out

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.

№ 11 What it costs

What it costs

See Billing for the invoice, and Pricing for the full rate card.

  • 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.

№ 12 Worked example

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.

№ 13 Said plainly

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.

№ 14 Attach

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.

№ 15 Answers

Database questions

The questions that come up once "just add a database" stops being a one-line decision.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

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.

Get a quote