Databases & Vector

Branchable Postgres, nothing to operate

PostgreSQL 16 through 18 that branches in under a minute: a copy-on-write fork of your data with its own connection string, for every pull request, migration or test run. Connect with psql or your ORM, let row-level security decide what each user sees, and add point-in-time restore on Superagent.

Databases & Vector product screenshot
databases
volcano cloud databases branches create app pr_482 --ttl 72h✓ Branch 'pr_482' of database 'app' createdvolcano cloud databases branches get app pr_482 --show-connection-stringStatus: active   Connection string: postgresql://volcano_client_…# app's data, its own password, and gone on its own in 72 hours
Overview

Starting a database is easy. Keeping one is not.

The work isn't provisioning. It's sizing the instance, putting a pooler in front of it, keeping the connection string out of the browser, writing an authorization layer because Postgres has no idea who your users are, and having somewhere to try a migration before it runs against production.

Volcano hands you ordinary PostgreSQL 16 through 18 on compute that scales with load inside the tier you pick. Volcano establishes who is asking before your first statement runs, so auth.uid() works inside your policies and the database itself decides which rows a request can see. A branch forks a copy of the data in under a minute; on Superagent, a restore takes the database back to a backup or a moment in time without changing its connection string.

Branches

A copy of production in under a minute

A branch is a copy-on-write fork of a database: the same schema, rows, roles and policies, behind its own connection string and password. Writes never reach the parent, storage is charged only for what the branch changes, and every branch expires on a deadline between one hour and 30 days, so a forgotten copy of production does not linger.

  • A database for every pull request or test run
  • Reset to the parent's current data in one call
  • Charged for what it changes, not what it copied
rehearse the migration
volcano cloud databases branches create app try_004 --ttl 24hStatus: provisioning · usually active in under a minutevolcano cloud databases branches get app try_004 --show-connection-stringStatus: active   Connection string: postgresql://volcano_client_…psql "$BRANCH_URL" -f volcano/migrations/004_split_names.sqlALTER TABLE · UPDATE 1284 · the parent never saw itvolcano cloud databases branches reset app try_004 --yes✓ re-forked from app as it is now · same connection string
Access

Two ways in, one set of rules

Query from the browser with the SDK, or open a connection on port 5432 with psql, your ORM or any Postgres driver — it is a normal Postgres endpoint over TLS, not an HTTP API pretending to be one. Whichever way a query arrives, Volcano establishes who is asking before your first statement, so your policies decide what comes back.

  • psql, Prisma, Sequelize, TypeORM or any driver
  • The SDK queries from the browser, with no API tier
  • One string, three access levels: admin, a given user, anonymous
select count(*) from notes
# one query, three callers, one policyadmin · migrations       → 1284signed-in user 8f1c…     →   12anonymous visitor        →    0the policy is the only thing deciding
Scale

Size each database for its job

Six tiers from volcano-db-xs to volcano-db-2xl, with compute that moves with load inside the tier you choose. Staging, a load test and production can each get a tier of their own instead of sharing one instance.

  • Six tiers, volcano-db-xs through volcano-db-2xl
  • Compute moves with load inside the tier
  • A database per environment or tenant
volcano.dev/dashboard/database
The Volcano dashboard listing databases with their region, Postgres version and tier
Capabilities

What every database comes with

Branches

Copy-on-write forks with their own credentials, ready in under a minute, reset to the parent in one call and deleted when their lifetime ends.

PostgreSQL 16 through 18

Pick the major version at creation, 18 by default. CREATE EXTENSION works, including vector, uuid-ossp and pg_trgm.

Autoscaling compute

Six tiers from volcano-db-xs to volcano-db-2xl. Compute moves with load inside the tier.

Backups and restore

On Superagent, restore manual or scheduled backups in place, or restore to a recent point in time without taking a backup first.

Row-level security

auth.uid(), auth.email(), auth.role() and auth.is_authenticated() are installed and ready to reference in policies.

Direct connections

Port 5432 over TLS for psql, your ORM, or anything that speaks the Postgres wire protocol.

Code

Create it, protect it, branch it

SQL
create table if not exists notes ( id uuid primary key default gen_random_uuid(), user_id uuid not null, title text not null, archived boolean not null default false, updated_at timestamptz not null default now() ); create index if not exists notes_user_updated on notes (user_id, updated_at desc); alter table notes enable row level security; -- The owner reads and writes their own rows. Nothing else does, including -- code that forgets to add "where user_id = ...". drop policy if exists notes_owner_read on notes; create policy notes_owner_read on notes for select to authenticated using (user_id = auth.uid()); drop policy if exists notes_owner_write on notes; create policy notes_owner_write on notes for insert to authenticated with check (user_id = auth.uid()); drop policy if exists notes_owner_update on notes; create policy notes_owner_update on notes for update to authenticated using (user_id = auth.uid()) with check (user_id = auth.uid());
Use cases

What people build on it

volcano cloud databases branches list app
# name        status   storage    expires inpr_482      active   12.4 MiB   2dpr_479      active   0 B        1dnightly_ci  active   3.1 MiB    6d✓ three copies of app, charged only for what each one changed
Platform

Works with the rest of Volcano

Authentication
  • Identity in your policies

    auth.uid() and auth.role() come from the session Volcano issued, so policies are written against real users.

Realtime
  • Streams from your tables

    Subscribe to INSERT, UPDATE and DELETE on any table. The read policy filters the stream per subscriber.

Functions and agents
  • Query from a function

    Store the connection string as the DATABASE_URL project variable, then query as the caller on the event or as an admin.

Next.js frontends
  • Server component queries

    The same client works in a server component, a route handler, or the browser.

Frequently asked questions

Read the docs
Is this real PostgreSQL?

Yes — PostgreSQL 16, 17 or 18, chosen when you create the database, with 18 as the default. It listens on 5432 over TLS, so psql, pg_dump, Prisma, Sequelize, TypeORM and any driver that speaks the Postgres wire protocol connect to it normally. Extensions install with CREATE EXTENSION.

Can I branch a database?

Yes. volcano cloud databases branches create makes a copy-on-write fork of the schema, rows, roles and policies, usually in under a minute, with its own connection string and password. A branch is charged only for the data it changes, lives between one hour and 30 days, and can be reset to the parent's current data at any time. Each database can have up to 10 branches on Hobby or 25 on Superagent.

How can the browser query the database safely?

Because Postgres enforces the rules, not your code. Volcano establishes the caller's identity on the connection before the first statement runs, so auth.uid() returns the signed-in user and your policies filter every query — including one written by a client trying to read more than it should.

How do migrations work?

As .sql files under volcano/migrations, applied in alphabetical order by volcano cloud databases migration up. There is no tracking table, so write migrations that are safe to run twice — or run your ORM's own migrations against the same connection string instead.

Can I use pgvector?

Yes. Run CREATE EXTENSION IF NOT EXISTS vector in a migration and embeddings become a normal column you can index and join against.

Are there backups?

Yes, on Superagent. Take a backup whenever you want one, set a daily, weekly or monthly schedule, and restore in place: the database keeps its connection string. You can also restore to any point in the seven-day restore window without having taken a backup at all. Hobby does not include backups or point-in-time restore.

Ready to create your first database?

Build, deploy, and scale on Volcano's global platform — free to start, with no infrastructure to manage.

Checkout more features