Serverless Postgres

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
history, 7 days appdb now yesterday 09:00 appdb-trybranch, copy-on-writeready in seconds your agent writes here appdb-yesterdayfork from the historyany host, any moment restore --at 09:00same name, URL, passwordold state: kept appdb.internal, TLS only, attached apps only
One database, its history, a branch taken now, a fork from yesterday, and a restore that keeps the old state.
secondsto branch, copy-on-write
7 daysof history by default, 1 to 30 per database
0.25 to 2 CUautoscaling by default
4 to 500 GBstorage limit
What it does

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.

CLI, API, MCP

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
Limits, errors and price

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

409name-takenThe name is used somewhere on Rytiv
409has-branchesA database with branches is deleted: delete its branches first
409url-handed-outThe URL of this copy was handed out already
409not-readyThe copy is still restoring, or failed
409not-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.

€0.0076per GB-hourMemory
€0.035per vCPU-hourCPU
€0.10per GB-monthDisk (volumes)

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

Questions

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.

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