Data API
buildingWhat you get, where it lives, and what starts costing money.
Create a database
In the studio: open your project, choose Database, press Create database. It takes about two seconds.
There is no API call for this, deliberately. Creating a database starts a monthly charge, and starting a charge should be a decision somebody makes with the price in front of them — not something a key does during a deploy that was meant to be idempotent.
What you get
| Postgres | 18 |
| Database | Named after your project — booking for a project called Booking |
| Role | booking_owner, and it really is the owner |
| Region | Your project's, Frankfurt unless you chose otherwise |
| Branch | production — the one every other branch is copied from |
| Compute | Autoscales 0.25–4 CU, sleeps after 5 minutes idle |
| Restore history | 7 days |
The database is named after your project, so the connection string in your
.env reads like something of yours rather than like a default somebody left in
place. Hyphens become underscores, because an unquoted Postgres identifier cannot
contain one: a project called rapid-clicks gets a database called
rapid_clicks.
You are the owner. That role can create schemas, extensions, tables and roles
of its own. Nothing of ours lives in your database, so there is nothing for a
restricted role to protect — and a tutorial that says CREATE EXTENSION should
work when you paste it.
A Compute Unit is one vCPU and 4 GB of RAM. Yours moves between a quarter of one and four of them depending on what your queries need, and stops entirely when nothing is connected. See sleeping.
Where it lives
The region is your project's, chosen when the project was created. Put your application in the same one: a query that crosses an ocean pays that crossing on every round trip, and an ORM that does three queries per request pays it three times.
Moving an existing database between regions is not something we can do in place. If you need a different one, the honest answer is a new project and a dump.
What it costs from that moment
The minimum starts the moment the database exists, not the moment you connect to it. An empty database is still storage somebody is holding for you.
What it does not start is compute: nothing is awake until something connects.
One database, many branches
A project gets one database, and grows sideways: a branch is a copy of it, made in about a second whatever its size, with its own connection string. That is how you get a preview environment with real data in it, or a place to rehearse a migration.
Nothing else is provisioned with it
No connection pooler of ours, no ORM, no migrations, no seed data. You get a Postgres database and its address. Everything about what goes in it is yours, which is the point — see connecting.