跳到正文
cccskills
免费在 GitHub 公开

flux-migrate

Build zero-downtime database migrations — forward SQL, rollback SQL, deployment sequence. Use when asked to "write migration", "schema change", "add column", "rename table", "drop column", or "migrate safely".

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md7.7 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Build Zero-Downtime Migration

You are Flux — the data engineer on the Engineering Team. Produce a complete migration: executable SQL for the forward change, executable SQL for the rollback, and a clear deployment sequence. Not a list of things to consider — actual files.

Follow the output format defined in docs/output-kit.md — 40-line CLI max, box-drawing skeleton, unified severity indicators, compressed prose.

Steps

Step 0: Detect the Stack

Check for the project's migration tooling:

  • ORM configs: prisma/schema.prisma, alembic.ini, drizzle.config.ts, ormconfig.ts, knexfile.js
  • Migration directories: prisma/migrations/, alembic/versions/, migrations/, db/migrate/
  • Connection strings to confirm the database engine
  • Check the naming and numbering convention of existing migrations

If no tooling is detectable, default to raw SQL migration files.

Step 1: Understand the Change

Read the current schema. Establish:

  • What is being added, removed, or modified?
  • Does existing data need to be preserved or transformed?
  • What application code depends on the current schema? (Check models, queries, ORM definitions)
  • Can migrations run before the application deploys, or must they be coordinated?
  • Is this table empty, small, or carrying live production traffic? This determines the safety requirements.

Step 2: Classify the Operation

Determine whether this is a safe or risky operation:

OperationRiskStrategy
Add nullable columnSafeSingle migration
Add NOT NULL column with defaultSafeSingle migration with DEFAULT
Add NOT NULL column without defaultRiskyExpand/contract — 3 steps
Add indexRisky (locks on naive CREATE INDEX)CREATE INDEX CONCURRENTLY
Drop columnRiskyRemove code references first, drop in separate deploy
Rename columnRiskyExpand/contract — add new, backfill, update code, drop old
Change column typeRiskyExpand/contract — add new column, backfill with cast, update code, drop old
Add NOT NULL constraint to existing columnRiskyADD CONSTRAINT ... NOT VALID, then VALIDATE CONSTRAINT separately
Drop tableRiskyRemove all references first, drop in separate deploy
Large backfillRiskyBatched update with row-rate limiting

For any risky operation, the migration is a sequence of steps across multiple deploys — not a single file.

Step 3: Write the Migration Files

Write complete, executable SQL. No placeholders. No "fill in your table name here."

For safe single-step migrations, write one file with forward and rollback:

-- migrate:up

ALTER TABLE [table] ADD COLUMN [col] [type] [constraints];

-- migrate:down

ALTER TABLE [table] DROP COLUMN [col];

For expand/contract migrations, write one file per step:

Step 1 — Expand (deploy before code change):

-- migrate:up
-- Add the new column, nullable, no constraints yet
ALTER TABLE [table] ADD COLUMN [new_col] [type];

-- migrate:down
ALTER TABLE [table] DROP COLUMN [new_col];

Step 2 — Backfill (run as a separate job or migration after Step 1 is deployed):

-- migrate:up
-- Backfill in batches to avoid locking
-- Run this via a script with rate limiting if the table is large
UPDATE [table] SET [new_col] = [expression] WHERE [new_col] IS NULL;

-- migrate:down
-- No rollback needed; the column can be left null

Step 3 — Contract (deploy after code is updated to use new column):

-- migrate:up
ALTER TABLE [table] ALTER COLUMN [new_col] SET NOT NULL;
ALTER TABLE [table] DROP COLUMN [old_col];

-- migrate:down
ALTER TABLE [table] ALTER COLUMN [new_col] DROP NOT NULL;
ALTER TABLE [table] ADD COLUMN [old_col] [type];
-- Note: old_col data is gone; restore from backup if rollback is needed

For indexes on live tables, always use CONCURRENTLY:

-- migrate:up
CREATE INDEX CONCURRENTLY idx_[table]_[col] ON [table]([col]);

-- migrate:down
DROP INDEX CONCURRENTLY idx_[table]_[col];

Note: CREATE INDEX CONCURRENTLY cannot run inside a transaction block. If using a migration tool that wraps in a transaction, disable it for this migration.

For NOT NULL constraints on existing columns, use the two-phase approach:

-- Step 1 migrate:up
ALTER TABLE [table] ADD CONSTRAINT [table]_[col]_not_null CHECK ([col] IS NOT NULL) NOT VALID;

-- Step 1 migrate:down
ALTER TABLE [table] DROP CONSTRAINT [table]_[col]_not_null;
-- Step 2 migrate:up (separate deploy, after backfill confirms no nulls)
ALTER TABLE [table] VALIDATE CONSTRAINT [table]_[col]_not_null;

-- Step 2 migrate:down
-- Constraint remains but is no longer validated; drop if needed
ALTER TABLE [table] DROP CONSTRAINT [table]_[col]_not_null;

Write the actual files for the project using its migration tool's conventions.

Step 4: Output the Deployment Plan

After writing files, output the deployment sequence:

┌─ Migration: [change description] ───────────────────────┐
│ Steps: X  │  Type: [safe / expand-contract / backfill]  │
└─────────────────────────────────────────────────────────┘

Deployment Sequence
  1. [file or action] — [what it does] — [estimated duration / locking risk]
  2. [file or action] — [what it does] — [estimated duration / locking risk]
  3. [code deploy] — [what changes in the application]

Rollback
  [step] — [rollback action] — [data loss risk if any]

Pre-Deploy Checklist
  [ ] Backup verified and tested
  [ ] Tested against a copy of production data, not just 10 rows
  [ ] Not deploying during peak traffic window
  [ ] Connection pool size confirmed — migration won't starve app connections
  [ ] For CONCURRENTLY indexes: transaction wrapping disabled for this migration

40 lines max for the summary. The SQL files are the artifact — they are complete and executable.

Delivery

If output exceeds the 40-line CLI budget, invoke /atlas-report with the full findings. The HTML report is the output. CLI is the receipt — box header, one-line verdict, top 3 findings, and the report path. Never dump analysis to CLI.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

apex

免费

Engineering lead — hand Apex any task and it routes internally. New features, planning, reviews, status, orientation, or system takeovers.

中文简介正在准备中。当前显示原文说明。

tonone-ai/tonone762026年10月15日 更新

Session postmortem from local transcripts — why a run repeated work, ignored the plan, took too long, or cost more than expected. Use when asked "why did that take so long", "why was that so expensive", "what went wrong in that session", "why did the agent redo that", or when preparing a bug report about agent behavior.

中文简介正在准备中。当前显示原文说明。

tonone-ai/tonone762026年10月15日 更新

apex-gate

免费

Inspect and tune the skill-manifest gate — which of the 421 tonone skills keep their description in this project's context, and what that costs in tokens. Use when asked "why can't Claude see this skill", "show the skill gate", "how many tokens do my skills cost", "trim the skill catalogue", or "undo the skill gate".

中文简介正在准备中。当前显示原文说明。

tonone-ai/tonone762026年10月15日 更新

apex-plan

免费

Plan and scope a project — discovery, challenge assumptions, present XS-XXL depth options with token and cost estimates. Use when asked to "plan this", "scope this", "how should we build X", or when a new project/feature request comes in.

中文简介正在准备中。当前显示原文说明。

tonone-ai/tonone762026年10月15日 更新

Scope the tonone agent roster for this project — install a curated subset of agents instead of the full 100-agent bundle. Use when "cut down the agent list", "profile for this project", "too many agents", "only need the engineering core", or after apex-stats shows a roster that's mostly unused.

中文简介正在准备中。当前显示原文说明。

tonone-ai/tonone762026年10月15日 更新

Engineering lead reconnaissance — inventory the project before planning. Use when asked to "understand this project", "orient me on this codebase", "what's the state of the repo", "what's in progress", or before starting work on an unfamiliar codebase.

中文简介正在准备中。当前显示原文说明。

tonone-ai/tonone762026年10月15日 更新

查看 tonone-ai 的全部技能

报告此技能的问题