dumpdrill
Prove the backup restores, not just that it was written.
Buy dumpdrill for $99One payment of $99, plus sales tax where it applies, and every future update. Delivered as a private GitHub repository you're invited to.
See it work
dumpdrill demo --pg | sed -n "/^--- rows present/,\$p"
--- rows present, every body {} (expected exit 1)
Dump: every.sql.gz
info dump - gzip-plain format, 0.00 MB
ok scanned - 102 lines, complete, no psql commands beyond the ones pg_dump writes
ok restore - loaded without an error (every error stops the load)
ok public.customers - 3 row(s) (at least 3 required)
ok public.documents - 3 row(s) (at least 3 required)
FAIL HOLLOW public.documents.body - only 0 row(s) hold anything (not NULL, '', {}, [] or null); need 3. The rows are there and worthless.
ok probe every document has an owner - returned '0'
NOT VERIFIED. A dump that loads cleanly and restores nothing is the failure this check exists to catch.
Result: FAILED
Every verdict above is the one it should be.
What it does
dumpdrill restores a pg_dump into a scratch database and checks the rows against a manifest you write, reads tar archives end to end, fails when the newest backup is stale, and rehearses a restore twice with a safety copy.
- Postgres restore proof
- Plain, gzip, custom, tar and directory dumps load into a private throwaway server or a local one you name. Required tables, row counts, filled columns and SQL probes decide pass or fail, so a dump of an empty database, or rows that are all {}, fails.
- Archive checks
- Reads a tar archive to the end, refuses unsafe paths, fails files that are all empty, and cross-checks a list inside the archive against the accounts actually present.
- Freshness
- Fails when the newest backup is too old, when there is a gap in the history, or when a size floor is missed. It reads GitHub Actions artifacts, files or a list of timestamps, so a schedule that says configured cannot hide four days of nothing.
- Safety copy and drill
- Copies aside exactly what a restore would overwrite, then restores twice in a scratch tree and runs your boot command.
- Honest exit codes
- 0 verified, 1 a real gap, 2 could not check. 2 is never a pass, and a proven gap wins over a check that could not run.
- A dump is a script
- A plain dump is SQL that runs on your machine. dumpdrill scans it for psql commands and COPY PROGRAM as a tripwire, not a sandbox; check only dumps you trust, or use --unprivileged and a disposable container for one you do not.
What you get
dumpdrill 1.0.1: the Python library and the dumpdrill command, with an offline demo and the full test suite, with 630 automated tests.
A commercial license. Use it and change it in your own projects and your clients' projects. Don't share or resell the source. Read the license.
Every update. New versions land in the same repository; git pull to get them.
Requirements
Python 3.10 or newer. Python 3.10 or newer, standard library only. The Postgres checks need PostgreSQL's command-line tools (psql, pg_restore, and initdb and pg_ctl for the built-in throwaway server) on your machine.
How buying works
- Enter your GitHub username. You'll see the account before you pay, so you can check it's yours.
- Pay $99, plus any sales tax shown at checkout, on Stripe's checkout page.
- Accept the invitation GitHub emails you. Signed in as that account, you'll also find it at
github.com/dominares-tools/dumpdrill/invitations. Invitations expire after 7 days; you can get a new one any time. - Clone and install:
git clone https://github.com/dominares-tools/dumpdrill.gitPrivate repo: sign in to GitHub on this computer first. Run
gh auth loginand choose HTTPS, or give git a personal access token when it asks for a password. To use an SSH key instead, clonegit@github.com:dominares-tools/dumpdrill.git.python3 -m venv .venv && . .venv/bin/activate pip install ./dumpdrill
Questions
Do I need GitHub?
Yes. Access is a read-only invitation to a private repository, sent to the GitHub account you choose.
Can I get a refund?
Yes, within 14 days, no questions asked. Access ends when the refund goes through. Refund policy.
Who takes the payment?
Payments are handled by Stripe, which works out sales tax. Your receipt and card statement show Link (LINK.COM*), Stripe's checkout service.
Something wrong?
Email support@dominares.org. Every buyer of a tool shares its repository, so support happens by email rather than in GitHub issues.