Backend
I built Revenant to prove PostgreSQL backups actually restore — in CI, on AWS, without touching your app code.
Pawan Bisht DEV Community
3 views
A team I know had green backup alerts for six months straight.
Every day, the backups completed.
Snapshots were being created on schedule. Retention was configured. Monitoring was quiet.
As far as everyone could tell, the database was protected.
Then one day, they needed to restore it.
The snapshot restored successfully.
The database started.
And then the application broke.
A migration that should have been there had never been applied to the restored instance. A critical table was empty. The first real query hit a foreign key constraint and failed.
Nothing was wrong with the backup.
The problem was that nobody had ever proved the restore actually worked.
That distinction sounds obvious, but it's surprisingly easy to miss.
Most teams have automated checks around whether a backup job completed. They know a snapshot exists. They know how long it's retained. They know the storage is healthy.
But a successful backup only tells you that you copied some bits somewhere.
It doesn't tell you whether those bits can become a working database again.
And that's the gap I wanted to solve.
So I built Revenant.
Revenant is an open-source CLI that validates PostgreSQL restores.
The idea is deliberately simple.
You tell Revenant what a healthy database looks like in a revenant.yaml file.
Maybe your customers and orders tables need to exist.
Maybe orders should never be empty.
Maybe the foreign key between orders and customers must remain intact.
Maybe there is a query that should always return data.
Maybe the newest order shouldn't be more than 24 hours old.
Those rules are specific to your business, so Revenant doesn't try to guess them.
You define them once.
Then Revenant runs them every time you validate a database.
For example:
plan: my-app-validation
database:
engine: postgres
connection: ${DATABASE_URL}
checks:
- type: connect
- type: schema
expect_tables:
- customers
- orders
- type: row_count
table: orders
min: 1
- type: foreign_key
table: orders
references: customers
- type: golden_query
query: "SELECT count(*) FROM orders WHERE status = 'paid'"
expect_min: 1
- type: freshness
table: orders
column: created_at
max_age: 24h
Then:
revenant verify
The result isn't just "command succeeded."
You get evidence:
✓ customers table exists
✓ orders row count 42 >= 1
✓ foreign key orders -> customers intact
Restore Validation: PASS
Wrote report.json
Wrote report.md
That report is useful because it answers a much more important question than "did the backup job run?"
It answers:
Can we actually use this database?
And because Revenant only talks to PostgreSQL, it doesn't care what your application is written in.
Node. Python. Go. Rails. Java.
It doesn't need to read your source code or understand your application architecture.
You can run it locally, in CI, or on a schedule.
We also built a GitHub Action so teams don't need to install Go or manage another runtime just to run the checks.
Set your DATABASE_URL, add the workflow, and let the pipeline periodically prove that your database still passes its restore validation rules.
The more interesting part is what happens with AWS RDS.
For RDS, you can take the validation one step further.
Revenant can find an RDS snapshot, restore it into a temporary sandbox, run your validation plan against the restored database, collect the results, and tear the sandbox down.
In other words, you're not just checking whether a database looks healthy today.
You're testing the thing you actually care about:
Can we recover from the backup we would use during an incident?
The current release includes the CLI, GitHub Action, PostgreSQL validation checks, JSON and Markdown reports, and the AWS RDS restore workflow.
It's free, open source, and Apache-2.0 licensed.
We've also started thinking about what comes next.
A single revenant.yaml works well when you're validating one application.
But organizations eventually have dozens or hundreds of databases.
That's where we're heading with the hosted layer: fleet-wide restore drills, scheduling, signed evidence, and a central place to see whether your databases can actually be recovered.
But the core idea won't change.
I've seen too many disaster recovery plans boil down to:
"We have backups."
I think the better statement is:
"We have backups, and we prove that they restore."
Because the worst time to discover that your backup doesn't actually recover your business is when you're already in the middle of an incident.
That's why I built Revenant.
If this problem sounds familiar, give it a try.
CLI: https://github.com/277pawan/revenant-cli
GitHub Action: https://github.com/277pawan/revenant-action
And if you find something that breaks, open an issue.
We're building this with early users, and those real-world restore failures are exactly what we want to learn from.
**Don't just back up your database.
Prove you can recover it.**
Read original: https://dev.to/pawan_bisht_3aa0838e302b2/i-built-revenant-to-prove-postgresql-backups-actually-restore-in-ci-on-aws-without-touching-474m
← Previous
Why We Open-Sourced Shaide
Next →
FHIR R4 for ML Engineers: What Actually Lives in a Patient Record
Related
Why You Still Need to Know Fallback Strategies When AI Writes Your Code
Backend
0
Dev.to (EN Zone)
The Hidden Cost of Django REST Framework Serializers
Backend
0
Dev.to (EN Zone)
TruffleHog vs Gitleaks vs GitHub Secret Scanning: Why Most CI Scanners Fail (2026)
Backend
4
DEV Community
How I Built an Autonomous AI Agent That Earns USDC While I Sleep
Backend
1
DEV Community
Comments0
No comments yet — be the first