Databases
Postgres
Section titled “Postgres”The default choice. Add Database > Postgres from the palette.
Flavors
Section titled “Flavors”| Flavor | What it adds | Postgres versions |
|---|---|---|
| Standard | Postgres with the contrib extensions |
14 to 18 (default 17) |
| pgvector | Vector search for embeddings and AI apps (pgvector 0.8) | 14 to 18 |
| PostGIS | Geographic data (PostGIS 3.6) | 14 to 18 |
| TimescaleDB | Time-series tables (TimescaleDB 2, open-source edition: no compression or continuous aggregates) | 16 to 18 |
The flavor can’t be changed after the first deploy. To switch, create a new database node with the flavor you want and move the data with a dump and restore.
Versions. You can move to a newer minor version of the same major (17.4 to 17.11). Going down, or to a different major, needs a dump and restore. Postgres 18 uses a new data layout, so there is no in-place upgrade from 17 or older.
What your app gets
Section titled “What your app gets”| Variable | Example |
|---|---|
DATABASE_URL |
postgres://app:…@db-12:5432/app_db |
Apps that read POSTGRES_URL, POSTGRES_URI, POSTGRESQL_URL, PG_URL, DB_URL, DATABASE_URI or
DATABASE_CONNECTION_STRING instead get that name too.
Fields you can use in ${…} references: uri, host, port, user, password, name, sslmode.
Accounts
Section titled “Accounts”| Account | Rights |
|---|---|
| Root | The postgres superuser. Never give it to an app. |
Application (app) |
Reads and writes data and creates tables. The default for links. |
| Read-write | Reads and writes data, no schema changes. |
| Read-only | Reads only. Good for reporting tools. |
Tables created by root before the app account existed are owned by postgres: app can read and write them but
not alter them.
More than one database
Section titled “More than one database”The Databases section holds up to 10 databases on one node. On the link, Database picks which one
DATABASE_URL points at, and Also inject URLs for adds others as DATABASE_URL_<NAME>.
Extensions
Section titled “Extensions”The Extensions section switches on any extension the image ships (contrib plus your flavor’s own). Extensions
that must be preloaded by the server (pg_cron, pg_stat_statements, pgaudit) can’t be turned on this way;
TimescaleDB is preloaded for you on the TimescaleDB flavor.
Connecting from your laptop
Section titled “Connecting from your laptop”External access is off by default. A workspace owner can switch it on under External access:
- Add the IP addresses allowed to connect (1 to 20 addresses or ranges; add my IP fills in yours).
- Pick which accounts may sign in from outside. Root never can.
- Deploy. The panel shows the host (
db-<id>.<edge domain>) and port.
Connections must use TLS:
psql "postgres://readonly:PASSWORD@db-12.example.dev:25012/app_db?sslmode=require"The certificate is self-signed. Download it from the panel to use sslmode=verify-ca or verify-full. Up to two
databases or caches per workspace can have external access.
Add Database > MySQL. Versions 8.4 (default, LTS), 9.7 (LTS) and 8.0. One database per node (named app by
default); defaults are 512 MB and 1 CPU.
| Variable | Notes |
|---|---|
DATABASE_URL, MYSQL_URL |
mysql://app:…@db-14:3306/app |
MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE |
The same, in parts |
Apps that read DB_HOST, DB_PORT, DB_USER/DB_USERNAME, DB_PASSWORD/DB_PASS, DB_NAME/DB_DATABASE (or the
DATABASE_* forms) get those names too, which covers WordPress-style and Laravel apps.
Accounts work as for Postgres. Root’s password is random and used only by the platform. External access is Postgres only for now.