Postgres databases
Velixir runs managed PostgreSQL inside the same K3s clusters that run your apps. Provisioning takes about a minute. Backups are daily.
Provision a database
From a project's Databases tab click + New Database. Pick:
- A name (becomes the database name).
- A plan (CPU + memory + disk).
- HA on / off — HA provisions a primary + replica in different nodes, with automatic failover.
We use CloudNativePG as the operator. It handles primary election, streaming replication, and backups.
Connecting from your app
The cleanest pattern: link the database to your app. From the database's detail page, Links tab → Link app. We inject a connection string into the linked app on its next deploy.
// In your .NET code
var connString = Environment.GetEnvironmentVariable("DATABASE_URL");
builder.Services.AddDbContext<MyDbContext>(opt =>
opt.UseNpgsql(connString));
The injected env var is named after the database (uppercased, hyphens to underscores): a database called orders-prod becomes ORDERS_PROD_DATABASE_URL. If only one database is linked, we also alias it to plain DATABASE_URL for convenience.
Connecting from outside the cluster
For psql / dbeaver / Rider sessions: go to the database's Connection tab and click Reveal. We show the connection string + give you a one-off command line. External connections route through the same edge as web traffic, so they work from anywhere; the password is rotated separately from the in-cluster one.
Backups
Daily logical backups (pg_dump) run at 02:00 UTC and land in object storage. The most recent seven are retained. You can browse them from the Backups tab and trigger a one-off backup any time.
Restores happen by provisioning a fresh database from a backup — pick a backup, name the new database, hit Restore. The original database stays untouched.
Plans
Database plans set per-instance resources (and per-replica resources in HA mode). You can change a plan with about a minute of downtime — we re-create the StatefulSet pod with the new resource limits.