Your Backup Isn't Real Until You Restore It to a Temp Database and Check
Most teams discover their backups are broken only during an incident. A restore-to-temp-database verification routine catches empty files, missing constraints, and data corruption before they become a production outage, and it costs nothing except a few minutes of scripted checks.
Scheduled backup scripts and green monitoring dashboards create a false sense of security. The gap between a backup that "ran successfully" and one that "actually works" is a restore nobody performs until disaster strikes — and that's when people discover empty files, missing objects, or version mismatches. A systematic verification workflow closes this gap: capture a business-metric baseline before backup, inspect the archive's table of contents with `sys_restore -l`, restore to a dedicated temporary database, reconcile aggregate data against the baseline, confirm every constraint and index is present and enforced, and record file size and a SHA-256 hash for traceability. The hash proves file integrity over time but does not prove restorability — only the full restore-and-check loop does that.
Backup verification is almost never automated because the restore step feels destructive and teams fear touching production; a temporary database sidesteps that fear entirely.
The distinction between a constraint being defined in the catalog and a constraint actually blocking invalid writes is a subtle failure mode that static checks miss — only a live insert test catches it.
File-level integrity checks like SHA-256 are commonly mistaken for proof of backup validity, but they answer a different question: file tampering, not database restorability.
Custom-format dumps (`-F c`) enable pre-restore inspection via `sys_restore -l`, a capability plain-text SQL dumps lack without manual parsing — format choice directly affects verifiability.