Postgres you can branch before every migration.
PostgreSQL on a compute of its own and a storage layer that keeps every commit on more than one node. Reachable only from the apps you attach, always over TLS. Branch it in seconds, fork it from any moment in its history, restore it in place. Over MCP, your agent writes on a copy, never on the original.
ry postgres create appdb
Serverless Postgres, in detail.
Branch in seconds
A copy-on-write copy of the database as it is now. It reads unchanged pages through its source, stores only what it writes, and is a database of its own with its own password. Writes to the branch never reach the source.
Fork from any point in time
A full, independent copy, from any moment in the history window: 7 days by default, 1 to 30 per database. It takes longer the larger the database is.
Restore in place
Put a database back to a moment. Name, URL and password stay the same; open connections end once, at the switch. The state before is kept as a database of its own until the window ends.
Private by default
appdb.internal resolves only inside apps attached to the database. TLS only; the CA is in every machine, so verify-full works without setup. ry proxy opens a tunnel for your laptop.
Where your agent writes
execute_sql runs read-only unless it names a branch, and the database itself refuses the write. The MCP tools never return a password.
Copies that expire
Give a branch or fork an expiry from 60 seconds to 30 days, and it is deleted on its own. A branch's URL is handed out exactly once.
Create, attach, branch, restore.
One command attaches the database to an app as a managed DATABASE_URL. Branches and forks are databases of their own.
ry postgres create appdb ry attach appdb --to web # DATABASE_URL as a managed secret ry deploy web # a running machine keeps its old env ry postgres branch appdb appdb-try --expires-in 1d ry postgres fork appdb appdb-yesterday --at 2026-11-03T09:00:00Z ry postgres restore appdb --at 2026-11-03T09:00:00Z ry proxy appdb 15432:5432 # psql -h 127.0.0.1 -p 15432 -U postgres appdb
curl -X POST https://api.rytiv.com/v1/resources \
-H "Authorization: Bearer $RYTIV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "appdb", "kind": "postgres"}'
# 201; url contains the password. A full key can read it again
# with POST /v1/resources/appdb/connection
curl -X POST https://api.rytiv.com/v1/resources/appdb/branch \
-H "Authorization: Bearer $RYTIV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "appdb-try", "ttlSeconds": 86400}'
# 202 ready; fetch its URL once
curl -X POST https://api.rytiv.com/v1/resources/appdb-try/url \
-H "Authorization: Bearer $RYTIV_TOKEN"
# {name, url}, exactly once; again answers 409 url-handed-out # once: add Rytiv to Claude Code
claude mcp add --transport http rytiv https://api.rytiv.com/v1/mcp --header "Authorization: Bearer <your key>"
> Create appdb, branch it, try the migration on the branch.
create_postgres {"name": "appdb"} → name, kind, port; no password
create_branch {"database": "appdb", "name": "appdb-try", "ttlSeconds": 86400}
execute_sql {"database": "appdb", "branch": "appdb-try",
"sql": "ALTER TABLE orders ADD COLUMN note text"}
execute_sql {"database": "appdb", "sql": "SELECT count(*) FROM orders"}
→ readOnly: true on appdb itself The bounds, as the platform enforces them.
Limits
- Version
- PostgreSQL 16 by default
- Compute
- autoscales 0.25 to 2 CU by default, or a fixed 128 to 16384 MB
- Storage limit
- 4 to 500 GB, default 10
- Expiry of a branch or fork
- 60 seconds to 30 days
- Fork or restore from
- any moment in the history, 7 days by default, 1 to 30
- Sleep after idle
- 10 s to 1 day, default 300 s
- Durability
- every commit on more than one storage node
Every bound is on Limits and quotas. A request outside them answers 400 with bad-request and names the field.
Errors you will meet
| 409 | name-takenThe name is used somewhere on Rytiv |
| 409 | has-branchesA database with branches is deleted: delete its branches first |
| 409 | url-handed-outThe URL of this copy was handed out already |
| 409 | not-readyThe copy is still restoring, or failed |
| 409 | not-a-copyThe original's URL came with its create answer |
Every error is JSON with a sentence and a stable code. Branch on code. See the error catalog.
Memory at €0.0076 per GB-hour while awake, CPU only while it computes, and €0.10 per GB-month for the data and the history it occupies. No separate database price.
For businesses and freelancers. All prices excluding VAT. Prepaid credit in euros, no plans, no seats. Introductory pricing until 31 January 2027. Pricing
What developers ask about Serverless Postgres.
Answers from the documentation. The Postgres guide has the rest.
Branch or fork?
A branch is a copy-on-write copy of the database as it is now, ready in seconds. A fork is a full, independent copy, from now or any moment in the history window; it takes longer the larger the database is.
Can I connect from my laptop?
A database has no public address. ry proxy appdb 15432:5432 opens a tunnel; connect psql to 127.0.0.1:15432. The first connection wakes a sleeping database.
What can my coding agent do to the database?
Read, through execute_sql in a read-only transaction. It writes only on a branch it names. create_postgres and create_branch never return a password.
Does it sleep?
By default a database sleeps after 5 minutes without connections, and the next connection wakes it. You can turn sleep off per database.
What does a restore do to the current data?
The state before the restore is kept as a database of its own named <name>-old-<timestamp>, or the name you pass as backupName, until the history window ends. Name, URL and password stay the same.
What if a host fails?
Every commit is stored on more than one storage node, and a failed compute starts again on another host.
On the same API, the same bill.
Create a database, branch it.
One command for the database, one for the branch.
claude mcp add --transport http rytiv https://api.rytiv.com/v1/mcp --header "Authorization: Bearer <your key>"
For businesses and freelancers, from a solo developer to a team. Pricing