Choosing Between Heroku Postgres Hobby-dev and Standard-0 for a Web Application
Decide whether Heroku Postgres Hobby-dev or Standard-0 fits your app by comparing row limits, connection counts, backup features, and cost, then provision and verify the choice with CLI commands.
23 Apr 2026, 08:40 UTC

Problem: selecting the right Heroku Postgres tier
When you need a PostgreSQL database on Heroku, the free Hobby-dev tier and the paid Standard-0 tier look similar at first glance, but they differ in limits that affect cost, reliability, and scalability. Choosing the wrong tier can lead to unexpected downtime, data loss, or unnecessary expense.
Decision and constraints
Decide based on three practical constraints:
- Expected data size – how many rows you anticipate storing.
- Connection demand – peak concurrent connections from your app and any background workers.
- Operational requirements – need for backups, point‑in‑time recovery, or the ability to fork/follow the database for staging or read‑replica workloads.
If any of these constraints exceed the Hobby-dev limits, you must choose Standard-0 (or a higher tier). Otherwise, Hobby-dev can be used for low‑traffic demos, CI pipelines, or early‑stage prototypes.
Comparison of supported options
| Feature | Hobby-dev | Standard-0 |
|---|---|---|
| Monthly cost | $0 | $50 |
| Row limit | 10 k rows | Unlimited (≈10 GB storage) |
| Max connections | 20 | 120 |
| Backups | None (only a 1‑day rollback) | Daily snapshots + point‑in‑time recovery |
| Fork/Follow | No | Yes |
| SSL | Required | Required |
Trade‑offs
- Hobby-dev – zero cost and instant provisioning, but the 10 k row cap and 20‑connection ceiling make it unsuitable for any production traffic. Lack of automated backups means a single point of failure can cause data loss.
- Standard-0 – adds a predictable $50/month fee, provides up to 120 connections, daily backups with point‑in‑time restore, and fork/follow capabilities. It runs on shared infrastructure, so for strict isolation or higher performance you would look at Private or Shield tiers, but for most standard web apps it offers a production‑grade baseline.
Concrete implementation: provisioning and validation
Below is a step‑by‑step example for provisioning the chosen tier and confirming it meets expectations. Replace myapp with your actual Heroku app name and HEROKU_POSTGRESQL_COLOR with the color code returned by the create command (e.g., HEROKU_POSTGRESQL_TEAL).
1. Provision the add‑on
# For Hobby-dev (free)
heroku addons:create heroku-postgresql:hobby-dev --app myapp
# For Standard-0 (paid)
heroku addons:create heroku-postgresql:standard-0 --app myapp
Both commands require your account to have permission to create add‑ons on the specified app.
2. Promote the new database to be the app’s primary
# Assume the add‑on created a config var HEROKU_POSTGRESQL_TEAL
heroku pg:promote HEROKU_POSTGRESQL_TEAL --app myapp
3. Verify the plan and status
heroku addons:info HEROKU_POSTGRESQL_TEAL --app myapp
Look for the Plan field; it should show heroku-postgresql:hobby-dev or heroku-postgresql:standard-0 and State: created.
4. Check current connection usage
heroku pg:info --app myapp
The output includes a Connections section (e.g., 5/20 for Hobby-dev or 12/120 for Standard-0). Ensure the used count stays comfortably below the limit.
5. Validate backup capability (Standard-0 only)
# Trigger a manual backup
heroku pg:backups capture --app myapp
# List backups to confirm it succeeded
heroku pg:backups --app myapp
A successful backup appears with a timestamp and a size; Hobby-dev will return an error indicating backups are not available.
Limitations and practical checks
Even after selecting Standard-0, remember:
- The tier still runs on shared hardware; noisy neighbors can affect latency.
- Row limits are soft‑bounded by storage (≈10 GB). Monitor
heroku pg:infoforData sizeto avoid sudden storage‑full errors. - SSL is enforced; your application must use
sslmode=requirein its connection string.
To continuously verify you remain within limits, consider adding a periodic check (e.g., a cron job or Heroku Scheduler) that runs heroku pg:info and alerts if connections exceed 80 % of the limit or if data size approaches 80 % of the storage quota.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.