in-progress· ongoing
pgShepherd
Postgres migration and observability CLI
RustPostgresTypeScriptSQLite
Why I built this
Existing migration tools are either too magic (Prisma) or too manual (raw SQL). I wanted something that respects DBA-level rigor while staying ergonomic.
The problem
Schema changes in production are still scary in 2026. Tools should make the safe path the easy path.
target users: Backend engineers running their own Postgres.
Core features
- Dependency-aware migration graph
- Online schema changes (pg-style)
- Query plan diffing across migrations
- Local replay against production schema dump
Technical challenges
- Detecting locking migrations statically
- Parsing Postgres's protocol-level errors into actionable messages
Engineering decisions
Why Rust
Distributed as a single static binary. No runtime dependency for the install path.
Lessons learned
- Postgres's catalog is more usable than people think — most 'magic' can be replaced with a good catalog query.