Backups and recovery · 9 min read
When a restore succeeds and hands you the wrong data
Restores that exit 0 can return old, empty or partial data. Learn six ways it happens and how to check row counts and freshness so a restore proves itself.
Backups and recovery · 9 min read
Restores that exit 0 can return old, empty or partial data. Learn six ways it happens and how to check row counts and freshness so a restore proves itself.
Postgres and data · 12 min read
Step by step PITR on PostgreSQL 15 to 17 with recovery.signal, restore_command and recovery_target_time, plus timelines and how to verify the result.
Backups and recovery · 10 min read
How restic forget --keep-daily, --keep-weekly and --keep-monthly combine, what prune really deletes, and how to pick a policy and test it with --dry-run.
Backups and recovery · 9 min read
Back up a small server with restic without corrupt databases, using SQLite online backup, pg_dump with roles, aborts on bad dumps and a restore test.
Packaging and releasing CLIs · 11 min read
Build the same Go commit in two directories, compare the bytes, and learn which flags and settings make the hashes match or differ.
Webhooks · 9 min read
Build a webhook receiver in Go that verifies signatures, dedupes deliveries, stores events in SQLite and processes them with retries, on one VPS.
Postgres and data · 11 min read
Turn on archive_mode, write a safe archive_command, take a pg_basebackup, and prove with pg_stat_archiver that WAL really reaches the archive.
Postgres and data · 10 min read
We killed a PostgreSQL server mid-write and restored from the archive alone, so you can choose archive_timeout from measured loss instead of guessing.
Postgres and data · 10 min read
A decision guide to logical dumps, pg_basebackup and point-in-time recovery, with a comparison table and recommendations by database size and RPO.
Backups and recovery · 9 min read
Set up dead-man's-switch pings, exit-code handling, snapshot age checks and failure alerts for a restic backup, so a job that stops running gets noticed.
VPS operations · 9 min read
Cron, curl and systemd are enough to catch a down app, a filling disk, low memory, an expiring certificate and a silent backup. Working scripts included.
Deploys and releases · 10 min read
Use expand and contract to change a SQLite or Postgres schema while two releases overlap, with the lock pitfalls and the safe forms of common changes.