Backups & Recovery
Opt-in backups on the add-on Backups tab. Restore always creates a new instance. Point-in-time recovery is available for PostgreSQL and MariaDB.
Enable backups
Backups are opt-in. Open the add-on on the phase canvas, go to Backups, and click Enable backups. Until you do that, there is no daily snapshot. After enable, the default schedule is 02:00 UTC. You can change it under Schedule, or click Backup now for an on-demand snapshot.
PostgreSQL uses continuous WAL plus base backups. MariaDB uses PhysicalBackup plus binlog PITR. Valkey uses RDB snapshots (no point-in-time slider). A workspace only offers these controls when the platform backup destination is configured.
Restore is never in-place
Point-in-time recovery (PITR)
Once backups are enabled, PostgreSQL and MariaDB can restore to a timestamp, the latest backup, or a named backup. Valkey restore is snapshot-only.
Restore to a new instance
On the add-on Backups tab, click Restore. Choose Latest backup, Point in time, or Named backup. Give the copy a new instance name and click Create new instance.
Best practice
PGHOST / PG* (or DATABASE_URL only if one was injected).On-demand backups
After backups are enabled, click Backup now on the add-on Backups tab before a risky migration. The snapshot appears in the list when the operator finishes.
Restoring from a snapshot
- 1.Open the add-on on the canvas and click Backups.
- 2.Click Restore and pick Latest backup, Point in time, or Named backup.
- 3.Name the new instance and click Create new instance.
- 4.When the copy is ready, switch the app connection. The original instance is unchanged.
Backup encryption
All backups are encrypted at rest. Encryption happens before data is written to the backup storage layer, so unencrypted data never lands there, and the keys are managed for you.
If your organisation has specific key-management or data-residency requirements, reach out to support to discuss the options available on Enterprise.
Testing your backups
A backup you've never tested is not a backup. Restore to a new instance, run your usual checks against the copy (Postgres clients honor PGHOST / PG*), then delete the copy if you do not need it.
# After switching a throwaway app (or local env) to the restore:
psql -c "SELECT COUNT(*) FROM users;"
psql -c "SELECT COUNT(*) FROM orders WHERE created_at > NOW() - INTERVAL '7 days';"