stolon

Before you move anything

Will your app run on Stolon?

Point the compatibility gate at your own schema and queries before you move anything.

Run it

On the hosted service, load your schema into a branch and run your queries there. Nothing reaches main:

# 1. a branch to probe in, and your schema in it $ psql "postgresql://app:<password>@db.stolondb.com/acme.main" -c 'CREATE DATABASE probe' $ pg_dump --schema-only "$DATABASE_URL" | psql "postgresql://app:<password>@db.stolondb.com/acme.probe" # 2. your queries — a log, an ORM dump, a file you wrote by hand $ psql "postgresql://app:<password>@db.stolondb.com/acme.probe" -f queries.sql

Any statement that won't run is refused with its SQLSTATE and the reason.

What works

AreaStatusNotes
Ordinary CRUD, joins, CTEs, aggregates, transactionssupportedthe bulk of most applications
Constraints: NOT NULL, UNIQUE, CHECK, foreign keyssupportedenforced
Roles, GRANT/REVOKE, row-level securitysupportedpolicies branch with the schema
Upserts: ON CONFLICT (email) DO UPDATEsupportedon the primary key or any unique column
String functions: left, substring, replace, concat, lpad, split_part…supportedalso format, md5 and regular expressions
Dates: now() - interval '7 days', extract, date_trunc, to_charsupportedalso interval columns, AT TIME ZONE and SET TIME ZONE
Window functions: row_number, rank, lag, sum(x) OVER (…)supportednamed windows and ROWS, RANGE and GROUPS frames
JSON: ->, ->>, @>, ||, jsonb_set, jsonb_build_object, json_aggsupportedincluding whole rows: row_to_json(t)
Enum types, schemas, partial indexessupportedreflected the way ORMs expect
PL/pgSQL functions, procedures, triggerssupportedalso DO blocks and CALL
Extensions: vector, pgcrypto, citext, hstore, pg_trgm, uuid-osspsupportedpgvector with ivfflat and hnsw; also unaccent, fuzzystrmatch
psql's \d metacommandsworks\dt, \d, \di, \df, \du and more

The full surface is in the docs.

Gate came back green? The next step is a database.

Start free