Individual skill
db-migrations
Use when a schema change must ship without downtime — NOT NULL, rename, type change, or backfilling millions of live rows — for the expand-contract sequence and the lock/batching discipline that keeps each step from freezing prod. NOT lock internals or EXPLAIN (that is `postgresdb`), NOT drizzle-kit mechanics (that is `drizzle-orm`), NOT PITR (that is `backups`).
skills/db-migrations/SKILL.md
Source commit d9d6bb338f66cc1e23998585e580a0ea45bbcb82
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- No
- Skill scan complete
- Yes
- Observed behavior
- Local scripts
- Last checked
- Nov 10, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 574
- Repository last updated
- Nov 9, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- agent-skills Repository topic
- agentic-ai Repository topic
- ai-agents Repository topic
- ai-coding Repository topic
- claude-code Repository topic
- cli Repository topic
- cline Repository topic
- codex Repository topic
- coding-assistant Repository topic
- cursor Repository topic
- migrations Declared skill tag
- zero-downtime Declared skill tag
- expand-contract Declared skill tag
- schema Declared skill tag
- backfill Declared skill tag
- ddl Declared skill tag
- legal Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 13,231 bytesevals/README.mddoc · 774 bytesevals/cases.yamlasset · 3,207 bytesreferences/backfill-and-batching.mddoc · 4,133 bytesreferences/expand-contract-playbook.mddoc · 5,665 bytesreferences/tools-and-runners.mddoc · 5,187 bytesscripts/verify.shruns · 4,740 bytes
Read excerpt
# Database migrations without downtime
A production migration is a **sequence**, not a statement. The moment you treat `ALTER TABLE ... NOT NULL`
as one atomic change, you have already lost: the lock blocks every writer, the deploy that depends on the
new column races the deploy that still reads the old one, and a rollback means a second outage. Your job
is to decompose one risky change into a chain of small steps where **every intermediate state is
independently deployable** — the old app keeps working, the new app keeps working, and you can stop at any
point without an outage.
This skill is engine-neutral. It owns the *choreography* — what order to run things in and how to keep each
DDL from freezing the table — across Postgres, MySQL, and serverless variants, whatever runner you use
(Flyway, Alembic, golang-migrate, drizzle-kit, raw SQL).
## Route elsewhere