CompareRender
Pay full pricefor every PR?
Render spins up a new, empty Postgres instance at full price for each pull request, and none of them ever sleep. BataDB branches production with its data, and a preview nobody is looking at costs $0.
Side by side
What's in the box.
Every plan gets branching and point-in-time restore, Free included. Your agents get the same CLI and MCP server you do.
| Feature | BataDB | Render |
|---|---|---|
| Scale to zero | Yes: After 5 idle minutes | No: No idle suspend |
| Branches with your data | Yes: Copy-on-write, one command | No: An empty instance per PR |
| No branch fees | Yes: None | No: Full instance price |
| Point-in-time restore | Yes: Up to 30 days, included | Yes: 3 to 7 days |
| Connection pooling | Yes: Built in | Yes: Built in |
| CLI with JSON output | Yes: --json on every API command | Yes: -o json |
| MCP server | Yes: 128 tools | Yes: Hosted |
| One-command import | Yes: bata import | Partly: Dump and restore |
The bill
Watch the idle hours add up.
We priced the same workload on BataDB and on Render, then let the month run.
One small database, busy two hours a day and idle the rest.
- BataDBPay as you go$0.58 a month
- Render0.5c-1g instance$20.50 a month
Saved against Render, every month
$19.9297% less
The bigger workloads run on our Team plan: $69 a month with 5,000 compute-hours included.
Talk to usMove
Moving over takes one command.
bata import copies your database from Render into a new BataDB project, then checks row counts and sequences on both sides.
From Render
npm install -g @batadata/clibata loginbata import --source "$RENDER_EXTERNAL_DATABASE_URL" --name my-app- Use the External Database URL on port 5432, not the pool URL on 6432.
- Add your IP to the database's allow list for the run.